Помните «локальную» историю bash в папке?

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

При подключении к PROMPT_COMMAND bash эта функция запускается каждый раз, когда вы получаете новое приглашение, поэтому пришло время проверить, находитесь ли вы в каталоге, для которого вы хотите создать собственную историю. Функция имеет четыре основных направления:

  1. Если текущий каталог ( $PWD ) не изменился, ничего не делайте (return).

Если PWD изменился, мы установили локальную функцию, единственной целью которой является кодирование кода «пользовательского каталога» в одном месте. Вы захотите заменить мои тестовые каталоги своими собственными (разделенными | ).

  1. Если мы не изменились в пользовательский каталог или вышли из него, просто обновите переменную «предыдущий каталог» и вернитесь из функции.

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

  1. Если мы изменились в пользовательский каталог, установите HISTFILE в файл .bash_history в текущем каталоге.

  2. В противном случае мы перешли из пользовательского каталога, так что сбросьте HISTFILE на запасной.

Наконец, поскольку мы изменили файлы истории, прочитайте в предыдущей истории.

Чтобы все было в порядке, скрипт устанавливает значение PROMPT_COMMAND и сохраняет две переменные внутреннего использования (фондовый HISTFILE и «предыдущий каталог»).

 prompt_command() { # if PWD has not changed, just return [[ $PWD == $_cust_hist_opwd ]] && return function iscustom { # returns 'true' if the passed argument is a custom-history directory case "$1" in ( */tmp/faber/somedir | */tmp/faber/someotherdir ) return 0;; ( * ) return 1;; esac } # PWD changed, but it's not to or from a custom-history directory, # so update opwd and return if ! iscustom "$PWD" && ! iscustom "$_cust_hist_opwd" then _cust_hist_opwd=$PWD return fi # we've changed directories to and/or from a custom-history directory # save the new PWD _cust_hist_opwd=$PWD # save and then clear the old history history -a history -c # if we've changed into or out of a custom directory, set or reset HISTFILE appropriately if iscustom "$PWD" then HISTFILE=$PWD/.bash_history else HISTFILE=$_cust_hist_stock_histfile fi # pull back in the previous history history -r } PROMPT_COMMAND='prompt_command' _cust_hist_stock_histfile=$HISTFILE _cust_hist_opwd=$PWD 

Когда мне нужно несколько раз использовать команду с длинными аргументами, я обычно создаю псевдоним в своих ~/.bash_aliases или вы можете поместить его в свой ~/.bashrc если хотите. Это легко и экономить время, вместо этого искать старые команды в истории.