Как использовать exec из NodeJS и всегда выделять stdin

#node.js #exec

Вопрос:

Я пытаюсь выполнить сценарий оболочки в электронном приложении с помощью exec . Я хочу отправить дочернему процессу некоторые данные через stdin. У меня есть кое-что, похожее на это.

 let childProcess = exec("echo-script"); childProcess.stdin.write(getSelection().toString()); childProcess.stdin.end()  

Это прекрасно работает, когда я что-то выбираю. Проблема в том, что если выбора нет, сценарий не получает stdin. например, если мой сценарий просто

 ls -l /dev/stdin ls -l /dev/fd/0  

Тогда мой вывод будет

 lr-xr-xr-x 1 root wheel 0 Aug 2 20:42 /dev/stdin -gt; fd/0 s--------- 0 dathan users 0 Dec 31 1969 /dev/fd/0  

И если я попытаюсь, скажем data="$(lt;/dev/stdin)" , получить ошибку «отказано в разрешении» при чтении stdin.

Но из оболочки, если бы я это сделал echo "" | ./echo-script , то получил бы другое поведение:

 lr-xr-xr-x 1 root wheel 0 Aug 2 20:42 /dev/stdin -gt; fd/0 prw-rw---- 0 dathan users 1 Oct 27 21:26 /dev/fd/0  

И я не получаю ошибку разрешений при входе stdin в свою переменную.

Как я могу заставить возвращаемый дочерний узел процесса exec вести себя более похоже echo "" | ./echo-script в этом отношении? Т. Е. Предоставить ему пустой stdin вместо отсутствия stdin?