• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

zx

date: 2022-06-26 excerpt: zxの使い方

tag: zxnodenodejsjavascript


zxの使い方

概要

  • javascriptをshell scriptとして使うことができるラッパー(ソフトウェア)
  • 拡張子は.mjs, .ts, .md
  • markdownのコードブロックを直接実行することができる

インストール

$ sudo npm i -g zx

基本的な文法と機能

サブプロセスのstdoutを表示しない

$.verbose = false;

サブプロセスをspawnする

let count = parseInt(await $`ls -1 | wc -l`) // spawn

サブプロセスをmultiprocessでspawnする

// 並列実行する場合の例
await Promise.all([
  $`sleep 3; echo 3`,
  $`sleep 2; echo 2`,
  $`sleep 1; echo 1`,
]);

http(s)のコンテンツの取得

let resp = await fetch('http://wttr.in') // httpを実行する場合
if (resp.ok) {
  console.log(await resp.text())
}

stdinを対話で読み取る

let name = await question('What is your username? ')
let token = await question('Choose env variable: ', {
  choices: Object.keys(process.env)
})

console.log(`${name},${token}`);

glob

let files = await glob(['*']) // globを利用する場合
console.log(`${files}`);

stdoutする文字に色を付ける

console.log(chalk.blue('Hello world!'));

fileが存在していたら

if (await fs.pathExists("/tmp/zx-test")){
  console.log("/tmp/zx-test is exists");
}

ファイルの出力

const outputPath = `${os.tmpdir()}/sample`;
fs.writeFileSync(outputPath, "ああああああ");

参考

  • google/zx を使って辛みの少ないスクリプトを書きたい
    • 細かい詰まったところが記されている
  • JavaScriptでシェルを書こう ——zxのご紹介
  • Google発のJavaScriptで書けるシェル 「zx」
  • zx使ってみたけどムズイ
  • 簡単なツールを書くのにgoogle/zxが便利だった話


zxnodenodejsjavascript Share Tweet