如何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命令来执行.
告诉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)');
system("bash -c 'diff <(ls -l) <(ls -al)'")
理论上应该这样做.-c
根据手册页,Bash的选项允许您传递shell命令来执行.