Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';Unix命令不能在Perl脚本中工作吗?_Perl_Unix - Fatal编程技术网

为什么';Unix命令不能在Perl脚本中工作吗?

为什么';Unix命令不能在Perl脚本中工作吗?,perl,unix,Perl,Unix,我想从某个模式开始提取文本文件的一部分,并将其存储在另一个文件中。我的Perl脚本将单个参数作为输入文本文件。到目前为止,我已经: my $INPUT = $ARGV[0]; my $LINES_TO_DUMP = 4000; my $startline = `egrep -n "^PATTERN" $INPUT | head -1 | cut -f1 -d:`; # THIS LINE DOESN'T WORK system("tail +$startline $INPUT | head -

我想从某个模式开始提取文本文件的一部分,并将其存储在另一个文件中。我的Perl脚本将单个参数作为输入文本文件。到目前为止,我已经:

my $INPUT = $ARGV[0];
my $LINES_TO_DUMP = 4000;
my $startline = `egrep -n "^PATTERN" $INPUT | head -1 | cut -f1 -d:`;

# THIS LINE DOESN'T WORK
system("tail +$startline $INPUT | head -$LINES_TO_DUMP > extracted.txt");
当我运行我的程序时,它会在运行第二个命令时“卡住”(egrp命令工作,并存储正确的数字)。我已经在终端上运行了这个命令,以确保它能正常工作


出了什么问题?

您的
$startine
可能有一个新行,因为它是从命令输出中消耗的。您应该确认这一点,然后在调用
system()
之前在
$startine
上使用
chomp()


以下是建议的解决方案。

但当我在终端中运行它时,只需半秒钟?您可能希望按照您现在使用它的方式对您的
$INPUT
进行消毒,它可能会造成很大的损坏。想象一个用户通过类似于
| rm-rf/
的东西。确保它是一个文件名。如果$INPUT=~m/[|]/,则可能使用
die“错误参数”也不要尝试我的示例输入,它可能会擦除您的系统!!!你是对的,我真的需要添加正确的错误检查/处理…我总是很懒,直到最后才添加它,因为我绝对需要你也可以使用Getop::Long或类似的工具。或污染模式。这在这里会有很大帮助。这似乎应该是一个评论。你发布的内容不是当前形式的答案。你可以做几件事使它有价值。e、 g:看链接到的@simbabque页面。您还可以链接到perldoc页面,查看
chomp
。除了@Hunter所说的之外,您还可以将其重新措辞,使其听起来更像您知道自己在说什么。这通常会让阅读你答案的人更有信心,他们也更可能信任你(并向上投票)。只需编辑它,让新读者将其视为一个良好的信息来源。只需留下一条评论,上面写着“谢谢@hunter的建议,我在答案中添加了这一点”,对评论进行投票,然后继续。这样你就可以创造出一个高质量的答案,半年后新来的人会立即理解。谢谢你给新手的建议。听取的意见。