第7章 Nashorn JavaScript エンジンの活用 : 問題 6 : シェルコマンドのパイプライン
問題
一連のシェルコマンドを受け取り、あるコマンドの出力を次のコマンドの入力として接続し、最後の出力を返す JavaScript の pipe 関数を書け
例えば
pipe('find .', 'grep -v class', 'sort')
と呼び出す
解答
-scripting
オプション付きでjjs
を起動してスクリプト記述拡張を有効にする
そのとき、組み込み関数の$EXEC
と組み込み変数の$OUT
を使って
function pipe() { // コマンドが指定されないケース if (arguments.length == 0) return ""; // コマンドを順に実行 $EXEC(arguments[0]); for (var n = 1; n < arguments.length; n++) $EXEC(arguments[n], $OUT); return $OUT; }
とすればよい
Windows 環境なので、いちいちcmd /c
を付与しないといけないが jjs
で試してみる
jjs> pipe("cmd /c dir /b \\windows\\system32\\*.exe") : 省略 : xcopy.exe xpsrchvw.exe xwizard.exe jjs> pipe("cmd /c dir /b \\windows\\system32\\*.exe", "sort /r") : 省略 : aitstatic.exe aitagent.exe AdapterTroubleshooter.exe jjs>