Dav*_*d B 6 bash shell perl sh backticks
我注意到当我在perl中使用反引号时,命令是使用sh执行的,而不是使用bash执行,给我一些问题.
我怎样才能改变这种行为,以便perl使用bash?
PS.我正在尝试运行的命令是:
paste filename <(cut -d \" \" -f 2 filename2 | grep -v mean) >> filename3
Run Code Online (Sandbox Code Playgroud)
"系统外壳"通常不可变.见perldoc -f exec:
如果LIST中有多个参数,或者LIST是一个具有多个值的数组,则使用LIST中的参数调用execvp(3).如果只有一个标量参数或一个包含一个元素的数组,则检查参数是否为shell元字符,如果有,则将整个参数传递给系统的命令shell进行解析(这是"/ bin/sh") -c"在Unix平台上,但在其他平台上有所不同).
如果您确实需要使用bash来执行特定任务,请考虑明确调用它:
my $result = `/usr/bin/bash command arguments`;
Run Code Online (Sandbox Code Playgroud)
甚至:
open my $bash_handle, '| /usr/bin/bash' or die "Cannot open bash: $!";
print $bash_handle 'command arguments';
Run Code Online (Sandbox Code Playgroud)
您还可以将bash命令放入.sh文件中并直接调用它:
my $result = `/usr/bin/bash script.pl`;
Run Code Online (Sandbox Code Playgroud)
小智 7
尝试
`bash -c \"your command with args\"`
Run Code Online (Sandbox Code Playgroud)
我很确定-c的参数被解释为bash解释其命令行的方式.诀窍是保护它sh
- 这就是引用的目的.
这个例子对我有用:
$ perl -e 'print `/bin/bash -c "echo <(pwd)"`'
/dev/fd/63
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9480 次 |
最近记录: |