💤

JavaScriptでシェルが書けるらしい

2021/11/26に公開

JavaScriptでシェルが書けるという「zx」なるものがあるようでして・・・
寝る前に少しだけでも触ってみたくて、ついつい触ってみました。

https://github.com/google/zx

お触りする前に

  • Requirement

    • Node.js >= 14.13.0

自環境のnodeのバージョンが「14.13.0」以下だったため、上げます。

$ npm install -g n
$ node --version
v14.17.6
  • npm で主役である「zx」をインストール。
$ npm i -g zx

お触りする

  • シェバンは「#!/usr/bin/env zx」
  • 拡張子は「.mjs」
  • 「$<コマンド>でコマンドを実行
$ cat test.mjs

#!/usr/bin/env zx
$`echo {a..z}`

実行

  • 「zx <スクリプト名> 」で実行
$ zx test.mjs 

$ echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z

実行コマンド「$ echo {a..z}」が標準出力されている・・・

「$.verbose = false;」で実行コマンドを標準出力させないようにしてみます。

$ cat test.mjs

#!/usr/bin/env zx
$.verbose = false;
$`echo {a..z}`.pipe(process.stdout)

再度実行で綺麗に出力

$ zx test.mjs 

a b c d e f g h i j k l m n o p q r s t u v w x y z

Promise.all

$ cat test.mjs

#!/usr/bin/env zx
$.verbose = false;

await Promise.all([
    $`echo {a..z}`.pipe(process.stdout),
    $`echo {A..Z}`.pipe(process.stdout),
    $`echo {1..10}`.pipe(process.stdout),
    $`echo {1..30..3}`.pipe(process.stdout),
]);

実行

$ zx test.mjs 

a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10
1 4 7 10 13 16 19 22 25 28

導入が簡単なのは素敵だなぁと思いました。

Discussion