我需要运行一个命令,直到我测试的系统失败,或者我中止脚本。我需要运行的命令可能会有所不同,所以我将它作为引号中的命令行参数。但我似乎无法使用system命令运行命令行参数。这是我到目前为止所尝试的内容(使用@Cfreak提供的脚本编辑我的尝试,即使我看到相同的问题):
#!/usr/bin/perl
while(1)
{
print "Iteration #: $count\n";
$retval = system ($ARGV[1]);
if( $retval != 0 ) {
print "System call $ARGV[1] failed with code $retval\n";
}
$count++;
}
如果我这样做 ./run ls
我看到以下照片:
System call failed with code 65280
Iteration #: 1
System call failed with code 65280
Iteration #: 2
我在这里做错了什么?
答案 0 :(得分:3)
你的system
参数附近有单引号。你根本不需要引号(虽然双引号可行)
你真的应该检查系统调用的返回值。如果调用成功,它应该返回0:
while(1)
{
print "Iteration #: $count\n";
$retval = system ($ARGV[1]);
if( $retval != 0 ) {
print "System call $ARGV[1] failed with code $retval\n";
}
$count++;
}
如果要在代码失败时停止脚本,请使用last
:
while(1)
{
print "Iteration #: $count\n";
$retval = system ($ARGV[1]);
if( $retval != 0 ) {
print "System call $ARGV[1] failed with code $retval\n";
last; # will break out of the loop
}
$count++;
}
答案 1 :(得分:3)
我相信你想要$ ARGV [0]而不是$ ARGV [1]。您可能还需要检查以确保$ ARGV [0]存在。
if( 0 > $#ARGV )
{
print "No command\n";
}
else
{
while(1)
{
print "$count\n";
my $ret = system( "ARGV[0]" );
if( 0 != $ret )
{
print "<$ARGV[0] failed with $ret\n";
exit;
}
$count++;
}
}
答案 2 :(得分:2)
65280 == 0xFF00,所以命令确实运行(0xFF00!= -1),它没有死于信号(0xFF00&amp; 0x7F == 0),退出时退出代码为255(0xFF00&gt;&gt; ; 8 == 0xFF == 255)。
所以我想你应该先检查你运行的命令。那么,根据你自己的输出,空字符串!也许您想要$ARGV[0]
而不是$ARGV[1]
?
使用use strict; use warnings;
!!!它可以避免这整个问题。