walkingmask’s development log

IT系の情報などを適当に書いていきます

MENU

zshでシェル再起動時に前回終了時のディレクトリでスタートする設定

講義でやったのでlog.

実行結果

どういうことかというと,まずzshを起動してcdしまくる.

Users/name%
Users/name% cd Downloads
Users/name/Downloads% cd cat_collection
Users/name/Downloads/cat_collection%

そして,ターミナルを終了したり,loginコマンドで再ログインなどすると

Users/name/Downloads/cat_collection%

zshが起動するようになる.

.zshrc

~/.zshrcの最後の方に以下のような記述をする.

autoload -Uz add-zsh-hook
add-zsh-hook chpwd chpwd_func
function chpwd_func() {
  sed -i -e "s:^cd .* #catcat:cd $PWD #catcat:g" ~/.zshrc
}
cd /Users/name/ #catcat

これで,保存してzshを再起動して完了.

解説

動作は単純で,zshのchpwd hook,sedとcdを使って,.zshrc内に最後にcdされた場所を記憶しておき,起動時にそこへcdをかけてるだけ.#catcatは他の行を誤って書き換えてしまわないようにおまじない.":"はsedの区切り文字.cdの度に.zshrcが書き換わるのでzshの動作が0.00何秒か遅くなるかも.zshexit hookを使ってもいい気がするけど,loginコマンドで再現できなかったのでchpwdにした.

参考にさせていただいたwebページ

qiita.com