CUBは子供の白熊

Java SE 8 実践プログラミングの練習問題を解く

第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>