Open5

zx の tips

かんなかんな

zx を使ってみているので、とりあえずイディオム的なのは絶対に忘れるのでメモ。
google/zx: A tool for writing better scripts

shell script の移植性の低さと謎文法を調べるコストの高さがいやだったのでついに手を出した。
記号が多くて調べるのも面倒だし、だいたい環境変えると動かないし、まあ shell script が悪いのではなく自分が悪いのだろうけど、結構同じように思っている人がいるからこそこういうのが出てきている、のだと思いたい。
oil とも迷ったが、一応仕事で使うので全く新しい(とは言え shell だが)よりも JS の方が拒否反応が少ないかと思い zx にした

かんなかんな

pwd を script が配置されているパスにする
(普通の shell script と同じく)

cd(__dirname)

command で複数の引数を展開
文字列をそのまま渡すのではなく、配列にする必要がある
Ref: zx/quotes.md at main · google/zx

const options = '--oneline --decorate --color'.split(' ')
await $`git log ${options}`
かんなかんな

Markdown 内部の script を実行できる。
これは便利では。
結局なにやっているスクリプトかって後から見てもわからんから。
google/zx: A tool for writing better scripts

かんなかんな

動作をみていると、これは内部的には md を mjs に変換しているみたい。
実行中だけ、mjs ファイルが生成されている

かんなかんな

zx の結果を他の zx で使う

zx はデフォルトで実行したコマンドをすべて stdout に吐き出している。
そのため、以下のように結果を受け取ろうとすると、余計なコマンドのログまで入ってきてしまう。

const result = $`zx other-script.mjs`

quiet して、欲しい結果だけを、other-script.mjs で明示的に echo する

const result = $`zx --quiet other-script.mjs`

pipe でいい感じにできるのかもしれないがわからない