【问题标题】:Perl: System command with both quotes and backticksPerl:带有引号和反引号的系统命令
【发布时间】:2014-01-21 03:38:42
【问题描述】:

我正在尝试从 Perl 中发送 OSX 命令。但是我不知所措,因为该命令同时包含引号和反引号,并且我无法弄清楚如何转义这两个字符并获得功能系统命令。

这是终端命令:
/usr/bin/osascript -e 'tell application "System Events" to tell process "Terminal" to keystroke "k" using command down'

感谢您的任何见解!

【问题讨论】:

    标签: macos perl


    【解决方案1】:

    您可以使用qquote-like operator,它的作用类似于普通的单引号(或qq,相当于双引号)。这使您可以使用选择的分隔符。

    my $cmd = q{/usr/bin/osascript -e 'tell application "System Events" to tell process "Terminal" to keystroke "k" using command down'};
    system $cmd;
    

    您也可以将列表传递给system,将外部程序的每个参数作为列表项。这样,您就不必引用将由 shell 解释的参数:

    system('/usr/bin/osascript', '-e', 'tell application "System Events" to tell process "Terminal" to keystroke "k" using command down');
    

    【讨论】:

      【解决方案2】:

      您还提到了反引号。也许您只是指单引号(在这种情况下,el.pescado 的答案是完美的),但如果您在反引号运算符之后,您可能想要使用 qx。以下是等价的:

      my @output = qx{/usr/bin/osascript -e 'tell application "System Events" to tell process "Terminal" to keystroke "k" using command down'};
      
      my @output = `/usr/bin/osascript -e 'tell application "System Events" to tell process "Terminal" to keystroke "k" using command down'`
      

      【讨论】:

      • 啊!我完全没有意识到那些是单引号。感谢您引起我的注意!
      猜你喜欢
      • 2013-10-07
      • 1970-01-01
      • 2015-05-29
      • 1970-01-01
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      • 1970-01-01
      相关资源
      最近更新 更多