Perl:带引号和反引号的系统命令

时间:2014-01-03 12:54:10

标签: macos perl

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

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

感谢您的任何见解!

2 个答案:

答案 0 :(得分:10)

您可以使用q quote-like operator,其效果与普通单引号相同(或qq,相当于双qoute)。这使您可以使用选择的分隔符。

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');

答案 1 :(得分: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'`