1

如果我运行以下命令:

system("screen -dmS $screenname");

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

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

我在这里做错了什么?

4

3 回答 3

3

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

为什么要使用 -c 你问?

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

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

我想我会在运行许多 Perl 系统命令时共享,并且以上内容始终适用于屏幕命令。

于 2013-11-09T05:00:49.843 回答
1

尝试将 single 替换\"\\\". 这应该够了吧。

在这里考虑同样的问题:

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

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

于 2013-11-08T23:11:09.637 回答
0

以 Simo A 的回答为起点,我会使用q( )而不是" ".

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

这意味着您不需要两次转义引号。

于 2013-11-09T20:55:40.010 回答