2015-01-20 2 views
3

Использование AppleScript Я могу вызвать скрипт с:Вызов Shell Script с JavaScript для автоматизации

do shell script "echo 'Foo & Bar'" 

Но я не могу найти способ сделать это с помощью JavaScript в редакторе Йосемити Script.

+0

Может быть, это поможет вам: http://stackoverflow.com/questions/27586694/pipe-to-subprocess-stdin-for-jxa – ShooTerKo

+0

Я рекомендую смотреть в «NSTask» Cocoa, поскольку он гораздо более надежный и способный, чем «shell-скрипт». – foo

ответ

2

do shell script является частью стандартных сценариев дополнений, так что-то, как это должно работать:

app = Application.currentApplication() 
app.includeStandardAdditions = true 
app.doShellScript("echo 'Foo & Bar'") 

я в настоящее время не работает в Yosemite, так что я не могу проверить это ...

Наслаждайтесь, Michael/Hamburg

+0

Протестировано на Йосемити: Это работает :-) – ShooTerKo

1

Для комплемента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))) 
Смежные вопросы