Existe algum utilitário ou plugin que inclua o diretório atual no histórico do bash?

Existe algum utilitário ou plugin que inclua o diretório atual no histórico do bash?

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_COMMANDrecurso, adicione ao seu .profile/ .bashrc:

myprompt() {  
  [[ "$PWD" != "$PREVPWD" ]] && history -s "# cd \"$PWD\""
  PREVPWD="$PWD" 
}  
PROMPT_COMMAND=myprompt

Isso coloca um comando (comentado) cdem 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 -soperação para excluir e reinserir/modificar os comandos , cd,, pushdpor exemplopopd

  [[ "$_cmd" =~ $_re1 ]] && {
    history -d $_seq  # remove original user command
    history -s "$_cmd $_args # $_cmd \"$PWD\"" # add annotated version
  }

(Uma opção tentadora é alterar HISTTIMEFORMATdinamicamente a PROMPT_COMMANDfunçã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 #nnnnlinha (época-segundos) acima de cada entrada de comando. Em princípio, o $PWDpoderia 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.

informação relacionada