当前位置:  开发笔记 > 编程语言 > 正文

如何在Perl的system()中使用bash语法?

如何解决《如何在Perl的system()中使用bash语法?》经验,为你挑选了2个好方法。

如何bash在Perl system()命令中使用语法?

我有一个特定于bash的命令,例如以下命令,它使用bash的进程替换:

 diff <(ls -l) <(ls -al)

我想用Perl来调用它

 system("diff <(ls -l) <(ls -al)")

但它给了我一个错误,因为它使用sh而不是bash执行命令:

sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0: `sort <(ls)'

vladr.. 46

告诉Perl直接调用bash.使用list变体system()来降低引用的复杂性:

my @args = ( "bash", "-c", "diff <(ls -l) <(ls -al)" );
system(@args);

如果你打算经常这样做,你甚至可以定义一个子程序:

sub system_bash {
  my @args = ( "bash", "-c", shift );
  system(@args);
}

system_bash('echo $SHELL');
system_bash('diff <(ls -l) <(ls -al)');

这也可以防止你调用/ bin/sh来运行bash (3认同)


David Z.. 6

 system("bash -c 'diff <(ls -l) <(ls -al)'")

理论上应该这样做.-c根据手册页,Bash的选项允许您传递shell命令来执行.



1> vladr..:

告诉Perl直接调用bash.使用list变体system()来降低引用的复杂性:

my @args = ( "bash", "-c", "diff <(ls -l) <(ls -al)" );
system(@args);

如果你打算经常这样做,你甚至可以定义一个子程序:

sub system_bash {
  my @args = ( "bash", "-c", shift );
  system(@args);
}

system_bash('echo $SHELL');
system_bash('diff <(ls -l) <(ls -al)');


这也可以防止你调用/ bin/sh来运行bash

2> David Z..:
 system("bash -c 'diff <(ls -l) <(ls -al)'")

理论上应该这样做.-c根据手册页,Bash的选项允许您传递shell命令来执行.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有