Использование AppleScript Я могу вызвать скрипт с:Вызов Shell Script с JavaScript для автоматизации
do shell script "echo 'Foo & Bar'"
Но я не могу найти способ сделать это с помощью JavaScript в редакторе Йосемити Script.
Использование AppleScript Я могу вызвать скрипт с:Вызов Shell Script с JavaScript для автоматизации
do shell script "echo 'Foo & Bar'"
Но я не могу найти способ сделать это с помощью JavaScript в редакторе Йосемити Script.
do shell script
является частью стандартных сценариев дополнений, так что-то, как это должно работать:
app = Application.currentApplication()
app.includeStandardAdditions = true
app.doShellScript("echo 'Foo & Bar'")
я в настоящее время не работает в Yosemite, так что я не могу проверить это ...
Наслаждайтесь, Michael/Hamburg
Протестировано на Йосемити: Это работает :-) – ShooTerKo
Для комплементаShooTerKo's helpful answer:
AppleSc ript предоставляет quoted form of
для безопасного использования переменных значений в качестве аргументов в команде оболочки, не опасаясь, что значения изменяются оболочкой или вообще нарушают команду.
Любопытно, что по состоянию на OSX 10.11, появляется быть не JXA эквивалента quoted form of
, но это легко осуществить свою собственную (заслуга this comment на другой ответ, а затем коррекция calum_b «s):
// This is the JS equivalent of AppleScript's `quoted form of`
function quotedForm(s) { return "'" + s.replace(/'/g, "'\\''") + "'" }
Из того, что я могу сказать, это делает именно то, что делает AppleScript quoted form of
.
Он включает аргумент в одно кавычки, который защищает его от расширений оболочки; так как строки с одиночными кавычками не поддерживают экранирование вложенных одиночных кавычек, входная строка с одинарными кавычками разбивается на несколько подстановок с одним кавычком, причем встроенные однокадровые спрятанные через \'
, которые затем оболочка вновь собирает в один литерал.
Пример:
var app = Application.currentApplication(); app.includeStandardAdditions = true
function quotedForm(s) { return "'" + s.replace(/'/g, "'\\''") + "'" }
// Construct value with spaces, a single quote, and other shell metacharacters
// (those that must be quoted to be taken literally).
var arg = "I'm a value that needs quoting - |&;()<>"
// This should echo arg unmodified, thanks to quotedForm();
// It is the equivalent of AppleScript `do shell script "echo " & quoted form of arg`:
console.log(app.doShellScript("echo " + quotedForm(arg)))
Может быть, это поможет вам: http://stackoverflow.com/questions/27586694/pipe-to-subprocess-stdin-for-jxa – ShooTerKo
Я рекомендую смотреть в «NSTask» Cocoa, поскольку он гораздо более надежный и способный, чем «shell-скрипт». – foo