nodejsアプリケーションからbashスクリプトを実行する必要があります。通常、私はこのようなものだろう:nodejsからシェルスクリプトを正しく実行するには
var childProcess = require('child_process');
childProcess.execFile('./test.sh', function (error, stdout, stderr) {
console.log(error, stdout, stderr);
})
をしかし、私は最近、それがそのように実行されたときに終了しませんbashスクリプトに走りました。 -
tr -dc "a-zA-Z0-9" < /dev/urandom
ASCII文字としてすべてを解釈するtr
を強制 - 擬似ランダムバイトを読んで、a-zA-Z0-9
fold -w 8
以外のすべてを捨てる - 出力をラップ #!/bin/bash
LC_CTYPE=C cat /dev/urandom | tr -dc "a-zA-Z0-9" | fold -w 8 | head -n 1
LC_CTYPE=C
:これは、問題を再現する最小限の例です。行8文字以内head -n 1
- 最初の行を読み取る(8文字)
端末から実行すると、それが正常に動作し、それがすぐに終了:
# ./test.sh
0J5hsGeh
以上使用して実行すると、スクリプトをnodejsそれだけでハング:
# node test.js
をhead -n 1
はすでに終了していますが、cat /dev/urandom
はまだ実行中です。
質問:nodejsからスクリプトを実行してハングしないようにするにはどうすればよいですか?
ENV:
- OS:
Ubuntu 16.04
- Nodejsバージョン:
v6.11.2
はあなたのシェバングに-xを設定し、あなたのbashスクリプト –
の最後に 'exit'コマンドを追加やbash -xを経由して、それを実行してみてください、私たちは、 –
男を何が起こっているかの鮮明な画像を持っているでしょうに感謝提案。しかし、彼らは役に立たない。スクリプトの最後の 'exit'は何もしません。この場合、前の行は決して終了しないので実行されません。'-x'は、スクリプトが決して終了しないので、' -x'によって生成された出力が出力されないので、助けになりません。とにかく、私はbashスクリプトをデバッグしようとしていません。私はnodejsを使ってそれを実行することがなぜ違いがあるのかを調べようとしています。 – Prvaak