Rust 製の Nushell を触ってみる。
こんにちは k-jun です。今回は Rust 製の Nushell を試してみようと思います。
https://github.com/nushell/nushell
ご丁寧にめちゃくちゃ長いドキュメントが存在しています。何やら書いてあることは良さげです。
rather than trying to be the jack of all trades, Nu focuses its energy on doing a few things well: Create a flexible cross-platform shell with a modern feel. Allow you to mix and match commandline applications with a shell that understands the structure of your data. Have the level of UX polish that modern CLI apps provide.
Docker で試せるようなので試してみます。
docker run -it quay.io/nushell/nu:latest ... Welcome to Nushell 0.21.0 (type 'help' for more info) /> help Welcome to Nushell. Here are some tips to help you get started. * help commands - list all available commands * help <command name> - display help about a particular command Nushell works on the idea of a "pipeline". Pipelines are commands connected with the '|' character. Each stage in the pipeline works together to load, parse, and display information to you. [Examples] List the files in the current directory, sorted by size: ls | sort-by size Get information about the current system: sys | get host Get the processes on your system actively using CPU: ps | where cpu > 0 You can also learn more at https://www.nushell.sh/book/ />
プロンプトが /> なの結構好きですね。ひとまず書いてあるコマンドを試してみる。
/> ls | where name == "bin" ───┬──────┬──────┬────────┬─────────────── # │ name │ type │ size │ modified ───┼──────┼──────┼────────┼─────────────── 0 │ bin │ Dir │ 4.1 KB │ 11 months ago ───┴──────┴──────┴────────┴─────────────── /> ls ────┬───────┬──────┬────────┬─────────────── # │ name │ type │ size │ modified ────┼───────┼──────┼────────┼─────────────── 0 │ bin │ Dir │ 4.1 KB │ 11 months ago 1 │ boot │ Dir │ 4.1 KB │ 3 years ago 2 │ dev │ Dir │ 360 B │ 6 mins ago 3 │ etc │ Dir │ 4.1 KB │ 6 mins ago 4 │ home │ Dir │ 4.1 KB │ 3 years ago 5 │ lib │ Dir │ 4.1 KB │ 11 months ago 6 │ lib64 │ Dir │ 4.1 KB │ 11 months ago 7 │ media │ Dir │ 4.1 KB │ 11 months ago 8 │ mnt │ Dir │ 4.1 KB │ 11 months ago 9 │ opt │ Dir │ 4.1 KB │ 11 months ago 10 │ proc │ Dir │ 0 B │ 6 mins ago 11 │ root │ Dir │ 4.1 KB │ 6 mins ago 12 │ run │ Dir │ 4.1 KB │ 11 months ago 13 │ sbin │ Dir │ 4.1 KB │ 11 months ago 14 │ srv │ Dir │ 4.1 KB │ 11 months ago 15 │ sys │ Dir │ 0 B │ 6 mins ago 16 │ tmp │ Dir │ 4.1 KB │ 11 months ago 17 │ usr │ Dir │ 4.1 KB │ 11 months ago 18 │ var │ Dir │ 4.1 KB │ 11 months ago ────┴───────┴──────┴────────┴───────────────
なるほど...。Unix の哲学である Pipeline の実装を、モダンなデータ型で結合出来るようにしているんですね...。これは確かに強力...。 普通の string 型の出力結果に where を当てようとすると以下のように Error に。
/> ps PID TTY TIME CMD 1 pts/0 00:00:00 nu 30 pts/0 00:00:00 sh 34 pts/0 00:00:00 ps /> ps | where cpu > 0 error: Type Error ┌─ shell:1:1 │ 1 │ ps | where cpu > 0 │ ^^ Expected row or table, found string
なかなかクセが強そうです。echo で 書き込みが上手く出来ない...
/> echo "hello world \n good bye" >> test ───┬───────────────────────── 0 │ hello world \n good bye 1 │ >> 2 │ test ───┴───────────────────────── /> ls -l test ───┬──────┬──────┬────────┬───────────┬──────────┬───────────┬──────┬───────┬──────┬───────────┬───────────┬─────────── # │ name │ type │ target │ num_links │ readonly │ mode │ uid │ group │ size │ created │ accessed │ modified ───┼──────┼──────┼────────┼───────────┼──────────┼───────────┼──────┼───────┼──────┼───────────┼───────────┼─────────── 0 │ test │ File │ │ 1 │ No │ rw-r--r-- │ root │ root │ 0 B │ 1 min ago │ 1 min ago │ 1 min ago ───┴──────┴──────┴────────┴───────────┴──────────┴───────────┴──────┴───────┴──────┴───────────┴───────────┴───────────
どうやらこういうことらしい...。
/> echo "hello world \n good bye" | save test /> cat test hello world \n good bye
サクッと試してみただけですが、簡単に移行は出来なさそうですね...。最初っから Nushell を使って使いこなせるようになればもしかして作業効率が劇的に上がったりするのだろうか...?
それでは今回はこのへんで..。