Lembre-se do histórico bash "local" em uma pasta?

8

Eu tenho um script em uma pasta que uso com argumentos longos. Existe alguma chance de eu ter um histórico dos comandos executados nesse diretório específico em vez de voltar por todo o histórico?

    
por faber 26.10.2016 / 13:25

2 respostas

2

Conectando-se ao PROMPT_COMMAND do bash, esta função é executada toda vez que você obtém um novo prompt, portanto, é um tempo decente verificar se você está em um diretório para o qual deseja um histórico personalizado. A função tem quatro ramificações principais:

  1. Se o diretório atual ( $PWD ) não foi alterado, não faça nada (retornar).

Se o PWD tiver alterado, então configuramos uma função local cuja única finalidade é incluir o código "diretório customizado" em um único local. Você vai querer substituir meus diretórios de teste por seus próprios (separados por | ).

  1. Se não tivermos alterado ou desativado um diretório personalizado, basta atualizar a variável "diretório anterior" e retornar à função.

Como alteramos os diretórios, atualize a variável "diretório anterior", salve o histórico da memória no HISTFILE e limpe o histórico da memória.

  1. Se alteramos para um diretório personalizado, defina HISTFILE como um arquivo .bash_history no diretório atual.

  2. Caso contrário, alteramos para fora de um diretório personalizado, portanto, redefina HISTFILE para o arquivo de estoque.

Por fim, como alteramos os arquivos de histórico, leia esse histórico anterior.

Para fazer as coisas funcionarem, o script define o valor PROMPT_COMMAND e salva duas variáveis de uso interno (o estoque HISTFILE e o "diretório anterior").

prompt_command() {
  # if PWD has not changed, just return
  [[ $PWD == $_cust_hist_opwd ]] && return

  function iscustom {
    # returns 'true' if the passed argument is a custom-history directory
    case "$1" in
      ( */tmp/faber/somedir | */tmp/faber/someotherdir ) return 0;;
      ( * ) return 1;;
    esac
  }

  # PWD changed, but it's not to or from a custom-history directory,
  # so update opwd and return
  if ! iscustom "$PWD" && ! iscustom "$_cust_hist_opwd"
  then
    _cust_hist_opwd=$PWD
    return
  fi

  # we've changed directories to and/or from a custom-history directory

  # save the new PWD
  _cust_hist_opwd=$PWD

  # save and then clear the old history
  history -a
  history -c

  # if we've changed into or out of a custom directory, set or reset HISTFILE appropriately
  if iscustom "$PWD"
  then
    HISTFILE=$PWD/.bash_history
  else
    HISTFILE=$_cust_hist_stock_histfile
  fi

  # pull back in the previous history
  history -r
}

PROMPT_COMMAND='prompt_command'
_cust_hist_stock_histfile=$HISTFILE
_cust_hist_opwd=$PWD
    
por 15.11.2016 / 18:41
-1

Quando eu preciso usar um comando com argumentos longos várias vezes, geralmente eu crio um alias no meu ~/.bash_aliases ou você pode colocá-lo no seu ~/.bashrc , se você preferir. É fácil e economizar tempo, em vez disso, procure por comandos antigos no histórico.

    
por 26.10.2016 / 16:34