2014-01-03 3 views
2

Я пытаюсь отправить команду OSX из Perl. Однако я затрудняюсь, потому что команда содержит как кавычки, так и обратные ссылки, и я не смог понять, как избежать обоих символов и получить команду функциональной системы.Perl: Системная команда с кавычками и обратными окнами

Вот терминал команда:
/usr/bin/osascript -e 'tell application "System Events" to tell process "Terminal" to keystroke "k" using command down'

Спасибо за любую проницательность!

ответ

9

Вы можете использовать qquote-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, ведьма каждый аргумент внешней программы в качестве элемента списка. Таким образом, вам не нужно приводить аргументы, которые иначе интерпретируются оболочкой:

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

Спасибо, работал отлично! – Westrock

2

Вы также указываете обратные метки. Возможно, вы просто указали одинарные кавычки (в этом случае ответ el.pescado прекрасен), но в случае, если вы были после оператора backtick, вы можете использовать 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'` 
+0

Gah! Я полностью не понял, что это одинарные кавычки. Спасибо, что привлек это к моему вниманию! – Westrock

Смежные вопросы