➡
Node.jsでシェルコマンドを実行してそのまま出力する
方法
※長くなってしまうため child_process
や spawn
についての説明は省きます。
結論として、 spawn
の第三引数に { shell: true, stdio: 'inherit' }
を入れるとできます。
shell: true
で OS によってうまく処理をしてくれるらしいです。
require('child_process').spawn('コマンド', [], { shell: true, stdio: 'inherit' });
stdout.on('data') では、何がダメなのか?
↓こういう書き方では何がダメか?
const log = require('child_process').spawn('sh', ['-c', 'コマンド']);
log.stdout.on('data', (data) => {
process.stdout.write(data);
});
log.stderr.on('data', (data) => {
process.stderr.write(data);
});
- OSによる分岐ができていません。
- 色付きの文字の色がなくなってしまったり何かしら情報が欠落する(必ずしも色がなくなるわけではありませんが)
自分自身このやり方で実装している時期があり、色が全部白くなってしまうことを悩んでいましたが、最初に紹介した方法で解決できました。
参考
Discussion