Os arquivos históricos podem ser unificados no bash?

35

Eu rotineiramente executo várias sessões screen em meus desktops e servidores Linux.

Um problema com isso é que, quando eu grep através do meu histórico de comandos, eu descobri que emiti um comando em uma sessão diferente e tenho que separar e anexar novamente para obter esse item de histórico.

É possível "forçar" as histórias atualizadas de modo diferente a partir de várias sessões para todos irem para um histórico central?

    
por warren 08.09.2009 / 09:12

3 respostas

40

Existem duas coisas que você precisa fazer:

  1. Insira o comando shopt -s histappend no seu .bashrc . Isso será anexado ao arquivo de histórico em vez de sobrescrevê-lo.
  2. Também no seu .bashrc , insira PROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n" e o arquivo do histórico será reescrito e re-lido toda vez que o bash mostrar o prompt.

EDIT: Graças ao e-t172 para o truque history -n

    
por 08.09.2009 / 09:26
9

Por favor, não use history -a; history -n , ele não funciona como esperado e deixará muitos comandos duplicados fora de ordem no seu histórico. Uma solução que funciona geralmente conforme o esperado é a seguinte:

# unified bash history
shopt -s histappend
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"

Usar uma nova linha em vez de um ponto-e-vírgula também é uma maneira curta de lidar com o problema de ponto e vírgula ausente / duplicado com PROMPT_COMMAND.

    
por 27.03.2014 / 20:10
-1

PROMPT_COMMAND não é definido por padrão em algumas distros. Por exemplo, ele é definido no Arch, mas não no Debian.

Eu tenho um "bashrc" no meu Dropbox que uso enquanto estou distribuindo, e inclui:

PROMPT_COMMAND="$( [ '$PROMPT_COMMAND' ] && echo $PROMPT_COMMAND; )history -a; history -n"
    
por 29.05.2013 / 21:05

Tags