Lembra do histórico do bash "local" em uma pasta?

Lembra do histórico do bash "local" em uma pasta?

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

Responder1

Ao conectar-se ao PROMPT_COMMAND do bash, essa função é executada toda vez que você recebe um novo prompt, portanto, é um momento decente para verificar se você está em um diretório para o qual deseja um histórico personalizado. A função tem quatro ramos principais:

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

Se a PCDtemalterado, então configuramos uma função local cujo único propósito é fatorar o código do "diretório personalizado" em um só lugar. Você desejará substituir meus diretórios de teste pelos seus (separados por |).

  1. Se não tivermos entrado ou saído de um diretório personalizado, basta atualizar a variável "diretório anterior" e sair da função.

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

  1. Se nós mudamosemum diretório personalizado e defina HISTFILE como um .bash_historyarquivo no diretório atual.

  2. Caso contrário, nós mudamosfora deum diretório personalizado, então redefina HISTFILE para o diretório padrão.

Finalmente, como alteramos os arquivos de histórico, leia o histórico anterior.

Para começar, 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

Responder2

Jeffresponderé ótimo se você quiser o histórico de um único diretório, mas se você concordar com a instalaçãozshvocê poderia usardiretório por históricopara obter um histórico específico do diretório para todos os diretórios.

Você pode instalar o zsh:

brew install zsh

Alternativamente, se você deseja instalaroh-meu-zsh, você pode adicionar nohistóricoplugin e escreva uma consulta personalizada para consultar o banco de dados sqlite que o histdb adiciona. Escrevi sobre isso e como adicionar preenchimentos automáticos em umDiários dos desenvolvedorespublicar. Verifica acomandos de bônusseção.

A consulta fica assim

show_local_history() {
    limit="${1:-10}"
    local query="
        select history.start_time, commands.argv 
        from history left join commands on history.command_id = commands.rowid
        left join places on history.place_id = places.rowid
        where places.dir LIKE '$(sql_escape $PWD)%'
        order by history.start_time desc
        limit $limit
    "
    results=$(_histdb_query "$query")
    echo "$results"
}

Isso também aceita um limite opcional:

show_local_history 50

por exemplo.

Responder3

Quando preciso usar várias vezes um comando com argumentos longos, costumo criar um alias no meu ~/.bash_aliasesou você pode colocar no seu ~/.bashrcse preferir. É fácil e economiza tempo, em vez disso procure comandos antigos no histórico.

informação relacionada