⚙️
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 では動かない。
Discussion