Вы также должны быть осторожны со всей этой концепцией. Например, если вам удастся запустить код, когда вы этого не ожидаете, это может запутать любое количество вещей.
Например, если вы запустили скрипт оболочки, который изменил текущий рабочий каталог, а затем, при выходе, сумели сохранить его CWD, вы можете оказаться в следующей запускающейся оболочке в каталоге, который вы не ожидай.
Еще один популярный вариант, по крайней мере для меня на $ work, - это когда скрипт запускается, когда пользователь root запускает скрипт, все автоматически (т.е. программно). Если вы делаете этот трюк CWD для своего собственного пользователя, это нормально, но он может в основном испортить системные инструменты, которые ожидают, что "su - youruser -c ls" вернет файлы в вашем домашнем каталоге. (Хорошо, называть «ls», поскольку ваш пользователь - глупая идея, но есть вещи, в которых ваш пользователь может иметь лучшую среду для запуска чего-либо, чем root - например, на монтируемых NFS, у которых есть сжатый root.)
Итак, ключевой момент здесь состоит в том, чтобы определить, используете ли вы интерактивную оболочку или нет, и, если нет, не восстанавливать и не сохранять CWD . IIRC, $ - имеет «i» для интерактивных оболочек. Используйте его для установки ловушки и для восстановления CWD.
Лично я просто установил псевдоним:
alias go='. go.sh'
и затем go.sh просто проверяет свой параметр, для какого каталога я хочу перейти. например, "go myproj" будет cd ~ / svn / myproj, а "go bigdisk" будет cd / mnt / bigdisk. И, для более сложных случаев, он может принимать больше параметров, например, «go myproj lib» будет просто «cd ~ / svn / myproj / myproj / lib» или что угодно. Нет автоматического сохранения, но нет и побочных эффектов.