私は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();
ありがとうございました!
これは完全に動作しますが、なぜ私は分かりません。 'stdin'に書き込む前に' cp.exec'を呼び出すのは、何かが読み込まれる前に 'dayone'コマンドを実行するようです。 'dayone'コマンドがどのように入力を得るのか説明できますか?ありがとう! – danseethaler
execコマンドはdayoneの完了/終了を待たず、node.jsブロックには何もしません。 Execはプロセスを開始し、プロセスはstdinからの読み込みを試みます。利用可能なものがない場合は、処理が開始されるとすぐに提供するものが存在するまでブロックされます。コマンドラインから手動で実行した場合と同様に、標準入力に何か入力するまでブロックされます。 –
完璧!本当にありがとう! – danseethaler