【发布时间】:2014-08-15 23:36:12
【问题描述】:
我正在尝试捕获system 调用的返回码。为简单起见,考虑一个您知道返回代码 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 调用(有错误重定向的那个)给了我一个零返回码?
【问题讨论】:
-
"&>" 应该是 "2>"。您正在后台运行命令,并获得 0 退出代码
-
谢谢,但我正在尝试重定向标准输出和标准错误。请参阅gnu.org/software/bash/manual/html_node/Redirections.html。根据该页面,语法应该是
&>? -
然后使用
$res = system("t.sh > /dev/null 2>1") -
谢谢@Miller,这行得通! (很高兴知道为什么
&>不起作用,因为它在手册中给出) -
@HåkonHægland
&>是一个相对较新的 Bash 功能(在 v4.x 中引入)。使用bash --version检查您的版本;&>在我的 v4.1.2 系统上正常工作。&>在语义上等价于>word 2>&1,所以你可以使用system('t.sh > /dev/null 2>&1');。注意2>&1中的&;如果你不这样做,你将在当前目录中创建一个名为1的文件。
标签: perl