我想使用bash而不是sh当我使用该open功能时。例如:
sub run_cmd {
my ($cmd) = @_;
my $fcmd;
print("Run $cmd\n");
open($fcmd, "$cmd |");
while ( my $line = <$fcmd> ) {
print "-> $line";
}
close $fcmd;
}
eval{run_cmd('ps -p $$')};
Run Code Online (Sandbox Code Playgroud)
在这里,输出是:
Run ps -p $$
-> PID TTY TIME CMD
-> 189493 pts/6 00:00:00 sh
Run Code Online (Sandbox Code Playgroud)
我们可以看到sh是默认使用的。
我有一些限制,我需要 (1) 使用 open 函数和 (2) 调用bash而不是sh. 我试图简单地bash在我的命令的开头添加,但它不起作用:
Run ps -p $$
/bin/ps: /bin/ps: cannot execute binary file
Run Code Online (Sandbox Code Playgroud)
我可以做什么来使用bash该open功能?
您可以显式运行bash。
open($fcd, "bash -c '$cmd' |");
Run Code Online (Sandbox Code Playgroud)
另一个答案确实显示了一些重要的最佳实践,用于何时cmd并非完全无关紧要或不受您控制。