この資料は Rust 製のコマンドラインツール nuについて紹介するものです。
Rustの環境構築やツールのインストール方法については以下を参照してください
nuは、モダンで柔軟なクロスプラットフォームシェルです。プロジェクト名は nushell です。
GitHub - nushell/nushell: A new type of shell
Unixでは、洗練されたコマンドを複数のステップに分割するために、コマンド間にパイプを通すことが一般的です。Nu はパイプラインの考え方を取り入れて、これをさらに大きく進めたものです。Unixの思想と同様に、Nuではコマンドはstdoutに出力し、stdinから読み込むことができます。さらに、コマンドは表など構造化されたデータを出力することができます(これは第3の種類のストリームと考えることができます)。パイプラインで動作するコマンドは、3つのカテゴリのいずれかに当てはまります。
ls
)where type == "dir"
)。table
)
コマンドはパイプ記号(|
)で区切られ、左から右へ流れるパイプラインを表します。> ls | where type == "dir" | table
╭────┬──────────┬──────┬─────────┬───────────────╮
│ # │ name │ type │ size │ modified │
├────┼──────────┼──────┼─────────┼───────────────┤
│ 0 │ .cargo │ dir │ 0 B │ 9 minutes ago │
│ 1 │ assets │ dir │ 0 B │ 2 weeks ago │
│ 2 │ crates │ dir │ 4.0 KiB │ 2 weeks ago │
│ 3 │ docker │ dir │ 0 B │ 2 weeks ago │
│ 4 │ docs │ dir │ 0 B │ 2 weeks ago │
│ 5 │ images │ dir │ 0 B │ 2 weeks ago │
│ 6 │ pkg_mgrs │ dir │ 0 B │ 2 weeks ago │
│ 7 │ samples │ dir │ 0 B │ 2 weeks ago │
│ 8 │ src │ dir │ 4.0 KiB │ 2 weeks ago │
│ 9 │ target │ dir │ 0 B │ a day ago │
│ 10 │ tests │ dir │ 4.0 KiB │ 2 weeks ago │
│ 11 │ wix │ dir │ 0 B │ 2 weeks ago │
╰────┴──────────┴──────┴─────────┴───────────────╯
パイプラインの出力を見たい場合がほとんどなので、表形式を想定して。上記のように table で実現できます。
> ls | where type == "dir"
同じコマンドを使いながら、異なる構成にすることができるのは、Nuの重要な哲学です。例えば、内蔵のpsコマンドを使って、上記と同じ場所で、実行中のプロセスの一覧を取得することができます。
> ps | where cpu > 0
╭───┬───────┬───────────┬───────┬───────────┬───────────╮
│ # │ pid │ name │ cpu │ mem │ virtual │
├───┼───────┼───────────┼───────┼───────────┼───────────┤
│ 0 │ 2240 │ Slack.exe │ 16.40 │ 178.3 MiB │ 232.6 MiB │
│ 1 │ 16948 │ Slack.exe │ 16.32 │ 205.0 MiB │ 197.9 MiB │
│ 2 │ 17700 │ nu.exe │ 3.77 │ 26.1 MiB │ 8.8 MiB │
╰───┴───────┴───────────┴───────┴───────────┴───────────╯