如何正确捕获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 $?} ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |