如何解决如何使开放函数使用bash而不是sh?
当我使用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 ps -p $$
-> PID TTY TIME CMD
-> 189493 pts/6 00:00:00 sh
我们可以看到sh
是默认使用的。
我有一些限制,我需要(1)使用open函数和(2)调用bash
而不是sh
。我只是尝试在命令的开头添加bash
,但是它不起作用:
Run ps -p $$
/bin/ps: /bin/ps: cannot execute binary file
如何将bash
与open
函数一起使用?
解决方法
您可以改为显式运行bash
。
open($fcd,"bash -c '$cmd' |");
对于cmd
并非完全无关紧要或不受您控制的情况,另一个答案确实显示了一些重要的最佳实践。
不要在报价中碰碰运气:
open my $fcmd,'-|',qw(bash -c),$cmd;
(还请注意,如果您用$fcmd
声明,则无需显式关闭my
;它会在代码块末尾自动关闭; perl不是java ;-) )
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。