gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:22:40 24 4
gpt4 key购买 nike

我在将 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com