簡體   English   中英

通過重定向捕獲Perl系統命令的返回碼

[英]Capture return code of Perl system command with redirection

我正在嘗試捕獲system調用的返回碼。 為簡單t.sh ,請考慮一個您知道返回代碼1的命令,例如以下bash腳本t.sh

#! /bin/bash
exit 1

然后考慮:

use warnings;
use strict;
use feature qw(say);

my $res=system("t.sh");
say ($?>>8);

$res=system("t.sh &>/dev/null");
say ($?>>8);

哪個打印

1
0

為什么第二個system調用(帶有錯誤重定向的那個)給我零返回碼?

我無法使用Bash v4.1.2復制您的問題:

$ perl -wE 'system( q{/bin/bash -c "true &> /dev/null"} ); say $? >> 8'
0
$ perl -wE 'system( q{/bin/bash -c "false &> /dev/null"} ); say $? >> 8'
1

但是, &>重定向操作符不是可移植的, 通常應避免使用 我不確定,但似乎在早期版本中可能無法正常工作。 *

以下語法在語義上是等效的,並且更具可移植性:

>file 2>&1

(請注意&2>&1

改用它。


*根據《 高級Bash腳本指南》的規定 ,“此操作符從Bash 4(最終版本)開始起作用。”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM