Сохранить последний рабочий каталог при выходе из Bash - PullRequest
9 голосов
/ 20 апреля 2009

Можно ли сохранить последний рабочий каталог, когда вы выполняете "выход" в bash. Поэтому при следующем входе в систему он будет находиться в каталоге, в котором вы находились при последнем выходе из системы.

Ответы [ 6 ]

17 голосов
/ 20 апреля 2009

Сохранить последний рабочий каталог в ~ ./. Bash_logout в скрытый файл:

pwd > ~/.lastdirectory

Прочтите этот файл в ~ / .bashrc с

[ -s ~/.lastdirectory ] && cd `cat ~/.lastdirectory`
8 голосов
/ 20 апреля 2009

Поместите это в ваш ~/.bashrc (вероятно, в конце):

cd "$(<~/.storepwd)"

Тогда у вас есть выбор из следующего:

Либо поместите это в ~/.bash_logout (не запомнит каталог для интерактивных оболочек без входа в систему):

printf %s "$PWD" > ~/.storepwd

Или используйте trap на EXIT, вставьте это в свой ~/.bashrc (ловушки могут быть перезаписаны легко / случайно):

trap 'printf %s "$PWD" > ~/.storepwd' EXIT

Или используйте PROMPT_COMMAND, укажите это ~/.bashrc (вероятно, самый надежный способ):

PROMPT_COMMAND+='; printf %s "$PWD" > ~/.storepwd'

Также убедитесь, что ваш ~/.profile или ~/.bash_profile содержит ваш ~/.bashrc, в противном случае путь не будет восстановлен при запуске оболочки входа в систему.

См. http://mywiki.wooledge.org/DotFiles для получения информации о том, как вы должны использовать ваши точечные файлы.

2 голосов
/ 21 апреля 2009

Вы также должны быть осторожны со всей этой концепцией. Например, если вам удастся запустить код, когда вы этого не ожидаете, это может запутать любое количество вещей.

Например, если вы запустили скрипт оболочки, который изменил текущий рабочий каталог, а затем, при выходе, сумели сохранить его 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» или что угодно. Нет автоматического сохранения, но нет и побочных эффектов.

1 голос
/ 20 апреля 2009

Вы можете записать текущий каталог (pwd) в какой-либо файл каждый раз, когда меняете dir (cd). При запуске терминала скрипт запуска bash должен искать в этом файле «last dir». Если что-то найдено - перейдите к нему.

0 голосов
/ 20 апреля 2009

Скорее всего, вы хотите сохранить текущий каталог в файл при выходе из оболочки. Существует несколько способов определения выхода из оболочки:

  1. Поместите некоторый код в ~ / .bash_logout. Это будет выполнено только при выходе из оболочки входа в систему, поэтому если вы просто закроете окно терминала, каталог не будет сохранен.
  2. Ловушка при выходе. Используя встроенную ловушку, вы можете выполнить некоторый код при выходе из оболочки. Это будет работать при выходе из любой оболочки - ну, любой оболочки, в которой вы установили ловушку, то есть.

Вы можете сохранять CWD при каждом запросе или при каждом запуске «cd», но это немного излишне.

Чтобы восстановить CWD при следующем запуске оболочки, достаточно просто запустить 'cd' для содержимого файла сохранения, если он существует.

Возможно, вы захотите подумать о том, что должно произойти, если у вас одновременно работает несколько оболочек. Какой из них вы хотите сохранить CWD? Должны ли все новые оболочки, которые начинают использовать этот CWD? Или только следующая оболочка, которая запускается?

0 голосов
/ 20 апреля 2009

Посмотрите на .bashrc и, возможно, сможете изменить его во время выхода из системы, чтобы он содержал интересующий вас каталог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...