2

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

Представьте, что у вас есть сервер, который вы используете для очень специфического скрипта, этот скрипт запускается с тоннами аргументов -x this -y that/thing/there.conf -d -g -t also -t more - всякий раз, когда вы подключаетесь к ssh сервер, чтобы использовать сценарий, вы нажмете несколько раз, и он там.

Итак, есть ли способ сделать это в одной системе, под одним пользователем?

1 ответ1

2

Прежде всего, может быть проще привязать кнопки « Вверх» и « Вниз» к history-search-backward и history-search-forward соответственно. От man bash:

   history-search-forward
          Search  forward through the history for the string of characters
          between the start of the current line and the point.  This is  a
          non-incremental search.
   history-search-backward
          Search backward through the history for the string of characters
          between the start of the current line and the point.  This is  a
          non-incremental search.

Если эта опция включена, если вы начнете вводить имя вашей команды, а затем нажмете « Вверх», будут отображаться только те команды из вашей истории, которые начинаются с того, что вы ввели. Таким образом, вы можете очень быстро найти интересующую вас команду, и вам не нужно возиться с файлами истории, относящимися к каталогу. Просто введите s , затем Up, и будут найдены только команды, начинающиеся с s . Используйте fooba и будут показаны только те, которые начинаются с fooba .

Чтобы включить это, добавьте следующие строки в файл ~/.inputrc на сервере (в зависимости от вашего эмулятора терминала, вам может потребоваться немного другой формат. Посмотрите на мой ответ здесь, если этот не работает):

"\e[A": history-search-backward
"\e[B": history-search-forward

Тем не менее, да, можно установить файл истории для каждого каталога. Добавьте эту функцию в ваш ~/.profile (не в ваш ~/.bashrc так как этот файл не читается по умолчанию при использовании ssh для входа на удаленный компьютер):

 setHistFile(){
    targetDirs=("/home/terdon/foo" "/home/terdon/bar")
    for dir in "${targetDirs[@]}"; do
        if [[ "$dir" = "$PWD" ]]; then
            ## Set the history file name
            export HISTFILE="./.bash_history"
            ## clear current history
            history -c
            ## read history from the $HISTFILE
            history -r
            ## Exit the function
            return
        fi
    done
    ## This will be run if the PWD is not in
    ## the targetDirs array
    export HISTFILE="$HOME/.bash_history"
    ## Read the history (in case we are leaving
    ## one of the targetDirs)
    history -r
}

Затем установите для нее переменную PROMPT_COMMAND (это команда, которая выполняется каждый раз, когда отображается приглашение оболочки):

export PROMPT_COMMAND='setHistFile'

Измените массив targetDirs на список каталогов, для которых вы хотите иметь свой собственный файл истории.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .