Como eu mantenho meu histórico bash nas sessões?

23

Estou trabalhando em um alvo x86 executando o fedora 9.

Sempre que eu reinicializo, meu histórico retorna a algum estado, e eu não tenho comandos que fiz nas sessões antes da reinicialização.

O que eu tenho que mudar para ter um histórico atualizado que eu tinha antes de reiniciar?

    
por BЈовић 17.11.2010 / 15:51

7 respostas

13

Qual história? bash-history? Se você está perdendo o histórico bash e tem várias sessões de cada vez, é porque cada sessão está sobrescrevendo o histórico das outras sessões.

Você provavelmente desejará dizer ao bash para não sobrescrever o histórico toda vez, mas sim anexá-lo a ele. Você pode fazer isso modificando seu .bashrc para executar shopt -s histappend .

Você também pode aumentar o tamanho do seu arquivo de histórico exportando HISTSIZE para um número grande (é em bytes, então 100000 deve ser suficiente).

    
por 17.11.2010 / 16:01
8

Eu estava com o mesmo problema, mas meu arquivo .bashrc já tinha o shopt -s histappend e o HISTFILE , HISTSIZE , HISTFILESIZE .

Para mim, o problema era que meu arquivo .bash_history era de raiz em vez do meu nome de usuário, portanto, meu usuário nunca pôde salvar o arquivo na saída.

    
por 04.04.2013 / 21:27
3

Procure as variáveis de ambiente HISTFILE, HISTSIZE, HISTFILESIZE.

    
por 17.11.2010 / 16:02
2

Eu escrevi um script para definir um arquivo de histórico por sessão ou tarefa com base no seguinte.

    # write existing history to the old file
    history -a

    # set new historyfile
    export HISTFILE="$1"
    export HISET=$1

    # touch the new file to make sure it exists
    touch $HISTFILE
    # load new history file
    history -r $HISTFILE

Não é necessário salvar todos os comandos do histórico, mas salva aqueles com os quais eu me importo e é mais fácil recuperá-los, passando por todos os comandos. Minha versão também lista todos os arquivos do histórico e oferece a capacidade de pesquisar todos eles.

Fonte completa: link

    
por 01.06.2014 / 08:03
1

Eu escrevi algumas linhas no meu .bashrc que realizam o seguinte: Salve todas as sessões após cada comando em um arquivo. Haverá tantos arquivos de histórico quanto os terminais já iniciados. Ao iniciar um novo terminal a partir do arquivo de histórico mais recente, carregue todos os arquivos de histórico de sessões anteriores no buffer de histórico até que um limite de contagem de linha seja atingido.

HISTCONTROL=''
HISTFOLDER=~/.bash_histories
HISTFILEEXT=history      # only files in $HISTFOLDER with this extension will be read
shopt -s histappend   # append when closing session
mkdir -p $HISTFOLDER
HISTFILE=$HISTFOLDER/$(date +%Y-%m-%d_%H-%M-%S_%N).$HISTFILEEXT  # create unique file name for this session. Nanoseconds seems to be unique enough, try: for ((i=0; i<=10; i++)); do date +%Y-%m-%d_%H-%M-%S_%N; done
# if HISTFILE unset, history is not saved on exit -> not really necessary if we save after each command, but its a double net safety
HISTSIZE=-1       # maximum number of commands to hold inside bash history buffer
HISTFILESIZE=-1   # maximum number of lines in history file
# history -a $HISTFILE # bash saves the total history commands entered since startup or since the last save and saves that amount of commands to the file. This means reading a history file after typing commands will trip up bash, but this won't be a problem if the history file is only loaded in the beginning. This means that only new commands are saved not all the old loaded commands, thereby we can load as many history files into the buffer as we want and still only save newly thereafter typed commands
PROMPT_COMMAND="history -a $HISTFILE; $PROMPT_COMMAND"  # This command is executed after very typed command -> save history after each command instead after only closing the session

# Load old histories from last 5 files/sessions
HISTLINESTOLOAD=2000
# --reverse lists newest files at first
names=($(ls --reverse $HISTFOLDER/*.$HISTFILEEXT 2>/dev/null))
toload=()
linecount=0
# Check if is really file and count lines and only append to $toload if linecount under $HISTLINESTOLOAD
for fname in ${names[*]}; do
    if test -f $fname; then
        linecount=$((linecount+$(wc -l < $fname) ))
        if test $linecount -ge $HISTLINESTOLOAD; then
            break
        fi
        toload+=($fname)
    fi
done
# Beginning with the oldest load files in $toload into bash history buffer
for (( i=${#toload[*]}-1; i>=0; i-- )); do
    history -r ${toload[$i]}
done
    
por 14.07.2015 / 21:54
0

Eu asseguraria que a .bash_history existe. Se isso não acontecer, não há lugar para o bash salvar o histórico de comandos.

se o .bash_history não existir, crie-o executando o toque:

touch ~/.bash_history

isso apenas cria o arquivo .bash_history vazio em seu diretório inicial, que será preenchido com seus comandos e deve persistir entre as sessões.

    
por 08.10.2015 / 22:38
-1

Boa resposta a esta pergunta está aqui:

link

    
por 15.05.2012 / 07:12