Одним из решений будет переписать историю так, чтобы при запуске это:
ls
он сохраняется как:
cd /current/directory && ls
Для Bash есть хитрость для изменения его истории, как объясняется в этом великолепном ответе stackoverflow. Вам нужно будет использовать переменную оболочки Bash с именем PROMPT_COMMAND
.
Если установлено, его содержимое выполняется каждый раз перед отображением подсказки. Установка этого к этому:
export PROMPT_COMMAND='hcmd=$(history 1); hcmd="${hcmd# *[0-9]* }"; if [[ ${hcmd%% *} == "cd" ]]; then pwd=$OLDPWD; else pwd=$PWD; fi; hcmd=$(echo -e "cd $pwd && $hcmd"); history -s "$hcmd"'
перепишет историю, как описано выше.
Попробуйте сначала в окне терминала, и если вам это нравится, добавьте его в файл .bashrc
чтобы включить его.
Недостатком является то, что в текущем воплощении все команды будут иметь префикс cd /some/dir
, что снижает удобочитаемость и может раздражать такие команды, как cd /usr/local
:
$ history | tail -n 5
522 cd /Users/jaume && cd /usr/local
523 cd /usr/local && file bin/ls
524 cd /usr/local && cd ~
525 cd /Users/jaume && file Documents/.localized
526 history | tail -n 5
Конечно, вы можете изменить PROMPT_COMMAND
чтобы переписывать историю только для уменьшенного числа команд.