colocar no histórico bash ou zsh caminho absoluto para os arquivos em que estou trabalhando

1

Eu descobri que no bash frequentemente uso algo assim:

  • vim ./somefile1 menos
  • menos ./dir1/dir2/somefile2
  • cp some_other_relative_path_to_file

e assim por diante

Depois disso, quando tento encontrar um comando no histórico e executá-lo, recebo um erro porque estou em um diretório diferente agora. É possível configurar o bash para "expandir" caminho relativo para arquivos com um absoluto quando eles vão para a história?

    
por user52151 19.02.2013 / 11:29

1 resposta

1

Uma solução seria reescrever o histórico para que, quando você executar isso:

ls

é salvo como:

cd /current/directory && ls

Para o Bash, há um truque para modificar seu histórico, conforme explicado neste stackoverflow responder . Você precisará usar uma variável do shell Bash chamada PROMPT_COMMAND .

Quando definido, seu conteúdo é executado toda vez que o prompt é exibido. Configurando isso:

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"'

irá reescrever o histórico como descrito acima.

Teste primeiro em uma janela do Terminal e, se estiver satisfeito, adicione-o ao arquivo .bashrc para ativá-lo.

A desvantagem é que, em sua atual encarnação, os comandos all serão prefixados com cd /some/dir , o que diminui a legibilidade e pode ser irritante para comandos como 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

Você poderia, é claro, modificar PROMPT_COMMAND para apenas reescrever o histórico para um número reduzido de comandos.

    
por 19.02.2013 / 13:42