Поместить в bash или zsh history абсолютный путь к файлам, над которыми я работаю

Я обнаружил, что в bash я часто использую что-то вроде этого:

  • Vim ./somefile1 меньше
  • Меньше ./dir1/dir2/somefile2
  • Cp some_other_relative_path_to_file

и так далее

  • Как укоротить отображение символов для текущего каталога в приглашении
  • Как исправить проблему несоответствия шифрования с помощью sftp?
  • Gpaste получить как STDIN для youtube-dl
  • Потеря истории Bash при использовании histappend
  • Кнопка bash home / end / delete добавляет тильду, или если ей предшествует escape-ключ, [1 ~ [3 ~
  • Поиск всех символических и жестких ссылок на файл в UNIX
  • После этого, когда я пытаюсь найти команду в истории и запускаю ее, я получаю сообщение об ошибке, потому что теперь я в другом каталоге. Можно ли настроить bash для «расширения» относительного пути к файлам с абсолютным, когда они идут в историю?

  • Значки наложения TortoiseSVN не отображаются при установке другой учетной записью пользователя?
  • Как сбросить Bash на Mac OSX, .bash_profile поврежден и bash больше не работает
  • Экран GNU - открыть новое окно в рабочем каталоге текущего окна в именованном (sessionname) сеансе?
  • Использование Wget для рекурсивного сканирования сайта и загрузки изображений
  • Сценарий запуска Linux для подключения к bluetooth и cron, чтобы поддерживать связь
  • Перенаправить stdout в файл, когда процесс выполняется в фоновом режиме
  • One Solution collect form web for “Поместить в bash или zsh history абсолютный путь к файлам, над которыми я работаю”

    Одним из решений было бы переписать историю, чтобы при ее запуске:

    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 чтобы переписать историю только для уменьшения количества команд.

    Давайте будем гением компьютера.