Node.js の child_process でパイプ、リダイレクトなどを使う
{shell: true}
を使う。
1 2 3 4 5 6 7 8 |
const childProcess = require('child_process'); const cmd = childProcess.spawn('ls -l | grep js', [], {shell: true}); cmd.stdout.on('data', (data) => { console.log(data.toString()); }); |
公式サイトによると、このオプションを付けると、Unix環境では sh -c <コマンド>
, Windows環境では cmd.exe /s /c <コマンド>
という動作となるらしいです。
下記はNG。
1 2 |
const cmd = childProcess.spawn('ls', ['-l', '|', 'grep', 'js']); |
引数が全て文字列として扱われるようです。
1 2 3 4 |
ls: grep: No such file or directory ls: js: No such file or directory ls: |: No such file or directory |
下記もNG。
1 2 |
const cmd = childProcess.spawn('ls -l | grep js'); |
第一引数がそのままプログラム名として扱われるようです。
1 2 |
Error: spawn ls -l | grep js ENOENT |
ちなみに exec の場合だと下記でそのまま動きます。ただ、spawn は別プロセスで動くという違いがあるので、適宜使い分ければ良いかと思います。
1 2 |
const cmd = childProcess.exec('ls -l | grep js'); |
最後まで読んでいただきありがとうございます。 このブログを「いいな」と感じていただけましたら、Twiter にてフォローいただけるとうれしいです。ブログ更新情報などもお届けします。
Follow @ryuta461
この記事をシェアする