加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 22:42:16 所属栏目:安全 来源:网络整理
导读:我无法将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命令的返回值? 另一个例
我无法将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的$?.壳看到的是什么

nc -z 8.8.8.8 441 ; echo 0

要解决此问题,您可以转义shell命令

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

或使用带单引号的qx运算符作为分隔符(这是“qx运算符内插值”规则的一个例外)

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 $?} );

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读