Será muito útil para o histórico do bash exibir o diretório de trabalho no qual os comandos foram executados. A história é boa para ver o que você fez, mas pode ser difícil dizer onde você estava fazendo isso.
Existe algum plugin ou utilitário, ou o bash pode ser configurado para adicioná-lo também?
Responder1
Você pode usar oPROMPT_COMMAND
recurso, adicione ao seu .profile
/ .bashrc
:
myprompt() {
[[ "$PWD" != "$PREVPWD" ]] && history -s "# cd \"$PWD\""
PREVPWD="$PWD"
}
PROMPT_COMMAND=myprompt
Isso coloca um comando (comentado) cd
em seu histórico cada vez que o diretório atual é alterado. Ele armazena $PWD
, então qualquer coisa assim cd ..
ainda registrará o caminho completo. Isso aparece no seu histórico normal, então não é o mais conveniente e quebra taquigrafias como !$
...
Aqui está uma versão melhor (ou seja, com engenharia excessiva), que verifica se o comando anterior mudou o diretório para um diretório absoluto para evitar poluir o histórico:
myprompt() {
local _seq _date _time _cmd _args
[[ -z "$HISTTIMEFORMAT" ]] && {
## reads history with no HISTTIMEFORMAT set
read _seq _cmd _args < <(history 1)
} || {
## this reads history with a HISTTIMEFORMAT='%Y%m%d %H:%M:%S '
read _seq _date _time _cmd _args < <(history 1)
}
## escaping =~ is troublesome, use variables instead
local _re1='(cd|pushd|popd)'
local _re2='^"?/'
## check for change-of-directory with absolute path
[[ "$_cmd" =~ $_re1 && "$_args" =~ $_re2 ]] && {
PREVPWD="$PWD"
return
}
[[ "$PWD" != "$PREVPWD" ]] && {
history -s "# cd \"$PWD\"" # stuff into history
PREVPWD="$PWD"
}
}
PROMPT_COMMAND=myprompt
Pode precisar de pequenos ajustes se você tiver um arquivo HISTTIMEFORMAT
.
Você pode ajustar a history -s
operação para excluir e reinserir/modificar os comandos , cd
,, pushd
por exemplopopd
[[ "$_cmd" =~ $_re1 ]] && {
history -d $_seq # remove original user command
history -s "$_cmd $_args # $_cmd \"$PWD\"" # add annotated version
}
(Uma opção tentadora é alterar HISTTIMEFORMAT
dinamicamente a PROMPT_COMMAND
função, mas isso não é adicionado ao arquivo de histórico, só é aplicado quando você exibe o histórico, portanto não funcionará como esperado.)
Bash salva carimbos de data/hora do histórico como uma #nnnn
linha (época-segundos) acima de cada entrada de comando. Em princípio, o $PWD
poderia ser adicionado a essa linha após o carimbo de data e hora sem quebrar nada, mas seriam necessárias algumas alterações não triviais no código para oferecer suporte adequado a isso.