带参数的perl exec屏幕

时间:2013-11-08 21:43:49

标签: linux perl system gnu-screen

如果我运行以下内容:

system("screen -dmS $screenname");

它的工作原理应该如此,但是当我尝试从perl运行一个屏幕并执行一个带有一些额外参数的命令(在本例中为tcpreplay)时,它不会按预期运行。

system("screen -dmS $screenname -X stuff \"`printf \"tcpreplay --intf1=eth0 s.cap\\r\"`\" ");

我在这里做错了什么?

3 个答案:

答案 0 :(得分:3)

对于这个问题,Simo A的回答可能是正确的,但我喜欢在使用屏幕而不是使用-X标志时使用以下内容。明确地告诉它命令语言解释器。

为什么要使用-c吗?

如果存在-c选项,则从字符串中读取命令。如果字符串后面有参数,则将它们分配给位置参数,从$ 0开始。

system("screen -dmS $screenname sh -c 'PRETTY MUCH ANYTHING WORKS'");

我想我分享了很多Perl系统命令,上面的命令总是适用于屏幕命令。

答案 1 :(得分:1)

尝试将\"替换为\\\"。这应该可以解决问题。

在这里考虑同样的问题:

system ("echo Quotation marks: \\\"here\\\" but \"not here\". ");

前一行代码的输出是:引号:“这里”但不在这里。

答案 2 :(得分:0)

以Simo A的答案为出发点,我会使用q( )而不是" "

system ( q(echo Quotation marks: \"here\" but "not here". ));

这意味着你不需要两次逃避报价。