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.