Я работаю над приложением nodejs, и мне нужно передать многострочную строку в команду оболочки. Я не профессионал в сценарии оболочки, но если я запускаю эту команду в моем терминале работает просто отлично:Проведите переменную javascript в команде оболочки с nodejs
$((cat $filePath) | dayone new)
Вот что у меня есть на стороне nodejs. Команда dayone работает, но в ней нет ничего.
const cp = require('child_process');
const terminal = cp.spawn('bash');
var multiLineVariable = 'Multi\nline\nstring';
terminal.stdin.write('mul');
cp.exec('dayone new', (error, stdout, stderr) => {
console.log(error, stdout, stderr);
});
terminal.stdin.end();
Благодарим за помощь!
Это работает отлично, но я не уверен, почему. Кажется, что вызов 'cp.exec', прежде чем мы напишем в' stdin', выполнит команду 'dayone', прежде чем что-нибудь будет читать. Можете ли вы объяснить, как команда 'dayone' получает вход? Благодаря! – danseethaler
Команда exec не будет ждать завершения/выхода dayone, поскольку ничего в блоках node.js не будет. Exec только начинает процесс, и процесс затем пытается прочитать из stdin. Если нет ничего доступного, он будет блокироваться до тех пор, пока не появится что-то, что будет, как мы это делаем, как только мы начнем процесс. Точно так же, как если бы вы запускали его из командной строки вручную, он блокируется, пока вы не набрали что-то в его stdin. –
Отлично! Спасибо! – danseethaler