【问题标题】:perl exec screen with parameters带参数的 perl exec 屏幕
【发布时间】:2013-11-08 21:43:49
【问题描述】:

如果我运行以下命令:

system("screen -dmS $screenname");

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

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

我在这里做错了什么?

【问题讨论】:

    标签: linux perl system gnu-screen


    【解决方案1】:

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

    你问为什么使用 -c?

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

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

    当我运行很多 Perl 系统命令时,我想我已经分享过了,上面的内容总是适用于屏幕命令。

    【讨论】:

      【解决方案2】:

      尝试用\\\" 替换单个\"。这应该可以解决问题。

      在这里考虑同样的问题:

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

      前一行代码的输出是:引号:"here" but not here。

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-04-13
          • 2018-02-22
          • 2011-08-22
          • 1970-01-01
          • 2019-10-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多