💤
JavaScriptでシェルが書けるらしい
JavaScriptでシェルが書けるという「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