我正在研究nodejs應用程序,並且需要將多行字符串輸入到shell命令中。我不是一個職業的shell腳本,但如果我在終端運行這個命令時,它工作得很好:用nodejs將一個javascript變量放入shell命令中
$((cat $filePath) | dayone new)
這就是我已經得到了該側的NodeJS。白晝命令確實有效,但沒有任何東西可以傳入。
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();
感謝您的幫助!
這很好,但我不知道爲什麼。在我們寫入'stdin'之前,似乎調用'cp.exec'會在有任何要讀取的內容之前執行'dayone'命令。你能解釋一下'dayone'命令如何獲得輸入嗎?謝謝! – danseethaler
exec命令不會等待dayone完成/退出,因爲node.js塊中沒有任何內容。 Exec只是啓動進程,然後進程嘗試從標準輸入讀取。如果沒有任何可用的東西,它會阻止,直到有什麼東西,當我們開始這個過程時就會提供它。就像你手動從命令行運行它一樣,它會阻塞,直到你在它的標準輸入中輸入了某些東西。 –
完美!非常感謝! – danseethaler