Я использую кучу разных машин AIX на работе, и мне нужно делиться пользователями с коллегами.
Чтобы облегчить мою жизнь, но не беспокоить других своими настройками, я создал файл .bashrc, который я копирую в /tmp /matthewh всякий раз, когда мне приходится использовать новый хост.
Мой .bashrc устанавливает новый файл истории, поэтому моя личная история команд остается изолированной от других, использующих ту же машину и пользователя.
# History options
export HISTTIMEFORMAT="%F %T "
export HISTCONTROL=ignorespace
export HISTSIZE=2000
export HISTFILESIZE=2000
export HISTFILE="/tmp/matthewh/$USER.bash_history"
После копирования файла я соединяюсь с ssh user@host -t "bash --rcfile /tmp/matthewh/.bashrc"
.
Это работает отлично. Проблема возникает, когда я переключаюсь на другого пользователя и получаю файл .bashrc.
$ su - apache
$ . /tmp/matthewh/.bashrc
Проблема в том, что первоначальный su - apache
загружает историю apache из ~/.bash_history, а затем, когда я получаю исходный код .bashrc, уже слишком поздно. Файл истории изменился правильно, но он уже был загружен. Я могу исправить эту проблему, запустив history -c && history -r
, поэтому все, что мне нужно сделать, это поместить это в .bashrc, и все должно быть в порядке, верно?
К сожалению, если я добавлю это в мой файл .bashrc, он ломается, когда я вхожу с ssh
и опцией -t "bash --rcfile /tmp/matthewh/.bashrc"
. Так как это делает его источником для входа в систему, загрузка истории является частью процесса. Это означает, что history -r
в .bashrc загружает историю во второй раз, и моя рабочая история в два раза больше, чем должна быть.
Есть ли способ для .bashrc определить, поступает ли он вручную или из оболочки входа в систему, чтобы он мог только очистить и перезагрузить историю условно?