web-dev-qa-db-fra.com

Comment garder mes antécédents de bash à travers des sessions?

Je travaille sur une cible X86 exécutant Fedora 9.

Chaque fois que je le redémarre, mon histoire revient à un État, et je n'ai pas de commandes que j'ai faites dans les sessions avant le redémarrage.

Qu'est-ce que je dois changer pour avoir mis à jour l'histoire que j'ai eu avant de redémarrer?

30
BЈовић

Je souffrais du même problème - mais mon .bashrc Fichier a déjà eu le shopt -s histappend et correct HISTFILE, HISTSIZE, HISTFILESIZE.

Pour moi, le problème était que mon .bash_history Le fichier était appartenant à root plutôt que mon nom d'utilisateur, mon utilisateur ne pouvait donc jamais enregistrer dans ce fichier à la sortie.

10
icc97

Recherchez les variables d'environnement Histfile, hissessize, histfilesize.

3
Jonathan Leffler

J'ai écrit un script pour définir un fichier d'historique par session ou par tâche, il est basé sur les éléments suivants.

    # 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

Il n'est pas nécessaire d'enregistrer toutes les commandes d'historique, mais cela enregistre ceux que je me soucie de la récupération et de la récupération de toutes les commandes. Ma version répertorie également tous les fichiers d'historique et permet de les rechercher tous.

Source complète: https://github.com/simotek/scripts-config/blob/master/hiset.sh

3
simotek

J'ai écrit des lignes dans mon .bstrucc qui accomplit les éléments suivants: Enregistrez chaque session après chaque commande dans un fichier. Il y aura autant de fichiers d'historique que vous avez déjà démarré des terminaux. Lors du démarrage d'un nouveau terminal à partir du dernier fichier d'historique, chargez tous les fichiers d'historique des sessions antérieures dans la mémoire tampon d'historique jusqu'à ce qu'un seuil de comptage de ligne soit atteint.

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
1
mxmlnkn

Mon exemple Amazon EC2 Ubuntu n'était pas sauvegardé l'histoire. .bashrc Avait toutes les commandes requises mentionnées dans d'autres réponses, mais la seule chose qui manquait était le fichier. Je devais le toucher pour le faire fonctionner.

touch ~/.bash_history
0
Chankey Pathak

Je m'assurerais .bash_history existe. Si ce n'est pas le cas, il n'y a nulle part que Bash pour enregistrer l'historique de la commande.

si .bash_history n'existe pas la créer en tournant Touch:

touch ~/.bash_history

cela crée simplement le fichier vide .bash_history dans votre répertoire personnel, qui remplira vos commandes et doit persister entre les sessions.

0
Ray Shah