Como observar o histórico de diretório passado em que o shell estava?

2

Às vezes, gosto de olhar para trás no histórico de comandos para descobrir o que estava fazendo. Às vezes ajudaria saber o que o cwd era para cada comando.

Então, estou pensando se há alguma maneira de rastrear isso. Eu acho que não é muito ruim apenas despejar o cwd com o histórico no arquivo de histórico, embora ele tenha muita redundância. Então, talvez seja melhor configurá-lo para que, como parte da renderização do prompt, eu possa fazer com que o zsh grave o índice do histórico atual e o cwd em algum outro log. Isso é suficiente para armazenar as informações para uso posterior.

    
por Steven Lu 07.04.2013 / 09:28

2 respostas

2

Tanto quanto sei, isso seria algo que você teria que escrever para si mesmo. As coisas podem ficar um pouco confusas se a sua hierarquia de arquivos mudar de qualquer forma. De qualquer forma, este link pode ajudá-lo se você decidir escrever isso sozinho.

    
por 07.04.2013 / 09:40
1

Se você está apenas procurando no arquivo de histórico, é necessário procurar os comandos cd que ficam antes do comando que você está assistindo, para entender o local de execução correto.

Se você quiser acompanhar pwd no seu arquivo de histórico, terá que escrever um rastreador.

Algumas maneiras de fazer isso simplesmente:

.0 Antes de tudo, uma maneira simples de encontrar um local do seu .bash_history :

grep <.bash_history '^cd \|theSpecificCommandISearchFor'

.1 script Você pode iniciar uma sessão de shell digitando:

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

depois de encerrar sua sessão, você pode:

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

para ver tudo o que foi feito.

Esta solução é genérica , deve funcionar bem com todas as ferramentas de linha de comandos interativos (não apenas bash , nem shell , você pode até salvar vim sessão com esta ferramenta).

Você pode adicionar isso ao topo do seu .bashrc (se você usar bash )

# 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 use trap debug para criar um arquivo de histórico alternativo, como:

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

Nota: Este trabalho em bash , não sei se nem como isso funciona com outro intérprete shell , como zsh ou dash .

    
por 07.04.2013 / 10:07