⚙️

zsh での mise の遅延ロードをちゃんとやる

に公開
mise () {
  set -o pipefail

  command mise activate zsh | {
    eval "$(cat)"
    unset -f mise
    command mise "$@"
  } || return $?
}

mise コマンドを実行して初めて mise の初期化を行う、という遅延ロードにおいて、
素朴に eval "$(mise activate zsh)" するだけだと mise が見つからなかった場合などに適切にエラーにならない問題の対応。
mise を名前空間上で関数で上書きしていることに対し、関数ではなくコマンドとして実行するために command 関数を使用している。

この shell がどういう仕組みなのかは以下を参照。残念ながら bash では動かない。

https://zenn.dev/euxn23/articles/a23c11d093ec4c

Discussion