abc.txt"); 但是当我运行这个时我得到了错误意外标记“|”附近的语法错误 即使我删除-6ren">
gpt4 book ai didi

perl - 在perl中执行命令时使用管道

转载 作者:行者123 更新时间:2023-12-02 08:43:16 24 4
gpt4 key购买 nike

我想在 perl 中使用以下命令,但它给我错误

system("zcat myfile.gz | wc > abc.txt");

但是当我运行这个时我得到了错误意外标记“|”附近的语法错误

即使我删除了 >abc.txt,我仍然会遇到错误。

我们可以在系统命令中使用管道吗?

错误详情如下:

sh: -c: line 1: syntax error near unexpected token `|'
sh: -c: line 1: ` | wc '

最佳答案

下次,测试您的演示程序以确保它确实表现出您所说的行为。你实际上跑了一些更接近

while (my $file_name = <>) {
system("zcat $file_name | wc > abc.txt");
}

其中有两个错误:

  • 您没有删除结尾的换行符,因此 shell 正在尝试执行

    zcat def.gz
    | wc >abc.txt

    代替

    zcat def.gz | wc >abc.txt
  • 在嵌入命令之前,您没有将文件名转换为 shell 文字。

    考虑如果文件名包含空格会发生什么。你会执行

    zcat def ghi.gz | wc >abc.txt

    代替

    zcat 'def ghi.gz' | wc >abc.txt

解决方法:

use String::ShellQuote qw( shell_quote );

while (my $file_name = <>) {
chomp($file_name);
system("zcat -- ".shell_quote($file_name)." | wc > abc.txt");
}

关于perl - 在perl中执行命令时使用管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14644829/

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