Я хочу запустить подпроцесс в JavaScript для автоматизации (JXA) и отправить строку на стандартный ввод этого подпроцесса, который может включать новые строки, метаданные оболочки и т. д. Предыдущие подходы AppleScript для этого использовали оператор bash <<<
, конкатенацию строк и quoted form of
строку. Если бы существовал JavaScript-эквивалент quoted form of
, которому я мог бы доверять для получения всех пограничных случаев, я мог бы использовать тот же подход; С этой целью я изучаю методы регулярных выражений.
Однако я подумал, раз у нас есть доступ к unistd.h
из JXA, почему бы не попытаться просто вызвать $.pipe
, $.fork
и $.execlp
напрямую? $.pipe
похоже, что он должен принимать массив из двух целых чисел в качестве параметра, но ничего из того, что я пробовал, не сработало:
ObjC.import('unistd')
$.pipe() // Error: incorrect number of arguments
$.pipe([]) // segfault
$.pipe([3,4]) // segfault
$.pipe([$(), $()]) // segfault
var a = $(), b=$()
$.pipe([a,b]) // segfault
$.pipe($([a,b])) // NSException without a terribly helpful backtrace
$.pipe($([$(3), $(4)])) // segfault
var ref = Ref('int[2]')
$.pipe(ref)
ref[0] // 4, which is close!
Какие-либо предложения?