2

Иногда мне нравится оглядываться в истории команд, чтобы понять, что я делал. Иногда было бы полезно узнать, что такое cwd для каждой команды.

Итак, мне интересно, есть ли способ отследить это. Я полагаю, что не слишком страшно просто вставить cwd в историю в файле истории, хотя это будет иметь большую избыточность. Так что, возможно, лучше настроить его так, чтобы в качестве части рендеринга подсказки я мог заставить zsh записать текущий индекс истории и cwd в какой-то другой журнал. Этого достаточно для хранения информации для последующего использования.

2 ответа2

2

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

1

Если вы просто просматриваете файл истории, вам нужно искать команды cd , стоящие перед командой, которую вы смотрите, для понимания правильного места выполнения.

Если вы хотите отслеживать pwd в своем файле истории, вам придется написать какой-нибудь трекер.

Некоторые способы сделать это просто:

.0 Прежде всего, простой способ найти местоположение из вашей .bash_history:

grep <.bash_history '^cd \|theSpecificCommandISearchFor'

.1 script Вы можете запустить сеанс оболочки, набрав:

script -a /tmp/script-XXXX -t 2>/tmp/script-XXXX.tm

после окончания сеанса вы можете:

scriptreplay /tmp/script-XXXX.tm /tmp/script-XXXX

чтобы увидеть все, что было сделано.

Это универсальное решение, должно прекрасно работать с любым интерактивным инструментом командной строки (не только bash или shell , вы даже можете сохранить сеанс vim с помощью этого инструмента).

Вы можете добавить это в начало вашего .bashrc (если вы используете )

# THIS WILL LOG EVERYTHING ON A TYPSCRIPT FILE USING script TOOL! # 
if ! [[ "$(ps ho cmd $PPID)" =~ ^/usr/bin/script\ -t\ $HOME/.bash_script_ ]]
  then
    function runScript() {
        local sname=$HOME/.bash_script_$(date +%F_%H-%M-%S_$$)
        exec /usr/bin/script -t 2> $sname.tim $sname
        exit 0
    }
    runScript
  fi

.2 использовать trap debug для создания альтернативного файла истории, например:

trap 'echo "$PWD :: $BASH_COMMAND" >>/tmp/my_trapDebug_history' debug

Примечание: это работает под , я не знаю, как и как это работает с другими интерпретаторами shell , такими как zsh или dash .

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