perl - 如何正确捕获unix命令的返回值?

标签 perl shell return-value

我在将 unix 命令的返回值放入 perl 变量时遇到问题。

Unix命令:

#nc -z 8.8.8.8 441; echo $?
1

Perl 命令:
#perl -e 'my $pstate=`nc -z 8.8.8.8 441; echo $?`; print $pstate;'
0

那么 perl 命令似乎得到了“无错误”的返回值?如何正确捕获 *nix 命令的返回值?

另一个例子:
#perl -e 'my $pstate=`ping -v 8.8.8.8 -c 1`; print $pstate;'
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

这将返回正确的值。那么我首先做错了什么?

最佳答案

变量在反引号内插入,所以 $?

my $pstate=`nc -z 8.8.8.8 441; echo $?`

指的是 Perl 的 $? , 不是 shell 的 $? . shell 看到的东西就像
nc -z 8.8.8.8 441 ; echo 0

要解决此问题,您可以转义 shell 命令
my $pstate=`nc -z 8.8.8.8 441; echo \$?`;

或使用 qx以单引号作为分隔符的运算符(这是“qx 运算符内的插值”规则的一个异常(exception))
my $pstate=qx'nc -z 8.8.8.8 441; echo $?';

或使用 readpipe使用非内插报价结构
my $pstate= readpipe( 'nc -z 8.8.8.8 441; echo $?' );
my $pstate= readpipe( q{nc -z 8.8.8.8 441; echo $?} );

关于perl - 如何正确捕获unix命令的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18223668/

相关文章:

c - 我应该从 C 函数返回 TRUE/FALSE 值吗?

perl - Perl 中@_ 的含义是什么?

perl - 后备打开文件 Perl

linux - 判断内核是 32 位还是 64 位的 if 语句

git - 从 shell 脚本检查 git push 的响应

javascript - 从 JS 中的 'success' block 返回值(Azure 移动服务)

algorithm - Perl 处理一万亿条记录

perl - C 中 return 和 continue 关键字的 Perl 等价物是什么?

bash - 如何为列表项生成唯一编号

python - 为什么我们在这个装饰器中返回 None ?