如果我运行以下内容:
system("screen -dmS $screenname");
它应该工作,但当我尝试从perl运行一个屏幕并执行一个命令(在这种情况下tcpreplay)与一些额外的参数,它不会按预期运行。
system("screen -dmS $screenname -X stuff \"`printf \"tcpreplay --intf1=eth0 s.cap\\r\"`\" ");
我在这做错了什么?
关于这个问题,Simo A的答案可能是正确的,但我喜欢在使用屏幕时使用以下内容而不是使用-X
标志。明确地告诉它命令语言解释器。
为什么要使用-c?
如果存在-c选项,则从字符串中读取命令。如果字符串后面有参数,则将它们分配给位置参数,从$ 0开始。
system("screen -dmS $screenname sh -c 'PRETTY MUCH ANYTHING WORKS'");
当我运行很多Perl系统命令时,我认为我已经分享了以上内容总是适用于屏幕命令。
尝试用\"
替换单个\\\"
。这应该够了吧。
在这里考虑相同的问题:
system ("echo Quotation marks: \\\"here\\\" but \"not here\". ");
前一行代码的输出是:引号:“这里”但不在这里。
以Simo A的答案为出发点,我会使用q( )
而不是" "
。
system ( q(echo Quotation marks: \"here\" but "not here". ));
这意味着您不需要两次转义引号。