🐚

nushell お試し

2023/08/04に公開

wndows11 wezterm nu-0.83

Windows, Linux, OSX 兼用の Shell としていけるかやってみる。

WezTerm で変な改行が入る件

https://memo.laughk.org/articles/2022-11-28-nushell-config-for-wezterm/

これで使えるようになった。やってく。

pipeline

powershell 感のある object パイプ。
わりと sql ぽい感じもする(where とか)。

内部コマンドと外部コマンドの区別があり、パイプの前後は

in | in, in | ex, ex | in, ex | ex の4種類があって
挙動が異なることを意識する。

https://www.nushell.sh/book/pipelines.html#working-with-external-commands

型に注意

型を意識する必要がある。

同じ関数でも複数の型に対応しているものはポリモーフィックに動作している。

  • table(List<record>)
  • record
  • List<record以外の型>
  • その他の型(string, int, datetime... etc)

コレクション型が3種類?あって table が pipeline 的にはいろいろできるのだけど、
List<datetime>Table<datetime から作った record> が別物だったり
慣れが必要。

fzf を混ぜる

ls | where type == dir | get name | to text | fzf | str trim | cd $in
command out
組み込み ls table
組み込み where type == dir
組み込み get name list<string>
組み込み to text string 外部コマンド(fzf)にわたす前に!
外部 fzf string

ghq で cd するやつ

def-env gg [] {
    ghq list --full-path | fzf --preview $"bat --color=always --style=header,grid --line-range :80 {}/README.*" | decode utf-8 | str trim | cd $in
}

scoped-cd のせいで def-env が必要ぽい?

https://www.nushell.sh/blog/2022-03-22-nushell_0_60.html#scoped-cd

特殊変数

  • $in pipeline の値にアクセスできる
  • $it 同じ?詳細不明

custom command

https://www.nushell.sh/book/custom_commands.html

関数に相当する。

  • [] が引数
  • 最後に評価した値が return する
  • 特に何もしなくても $in 変数がパイプ入力として使える様子
  • (func arg) もしくは ($in | func) のようにコールする

型別操作メモ

table

List<record>

record

json object ひとつが相当する。

items で key, value にアクセスできる。

https://www.nushell.sh/commands/docs/items.html

如何に table型に持っていくかが肝っぽい。
例えば気象庁の area リストを以下のようにして table に変形できる。

let area = "https://www.jma.go.jp/bosai/common/const/area.json"
http get $jma.area | get centers | items {|k,v| {center:$k} | merge $v}

Discussion