Comment fermer un terminal sans enregistrer l'historique?

33

Plus d'une fois, j'ai accidentellement exécuté plusieurs commandes et pollué mon historique bash. Comment fermer mon terminal sans sauvegarder mon historique bash? J'utilise Fedora.

Michael Mrozek
la source

Réponses:

25

L'historique de votre shell est enregistré dans le fichier indiqué par la HISTFILEvariable. Alors:

unset HISTFILE

Ceci s'applique également à zsh, mais pas à ksh, qui conserve l'enregistrement dans le fichier indiqué par le $HISTFILEdémarrage du shell (et inversement, vous décidez de sauvegarder votre historique dans ksh une fois que vous avez démarré le shell).

Gilles, arrête de faire le mal
la source
Je peux l'utiliser avant de me déconnecter après avoir pollué l'historique? et son utilité pour cette session? je n'ai pas besoin de la set HISTFILEprochaine fois que je me connecte? (dites simplement si cela est correct ou incorrect)
@ acidzombie24 C'est exact, les modifications apportées aux variables d'environnement ne sont pas enregistrées d'une session à l'autre, sauf si vous les stockez explicitement, par exemple dans des fichiers rc.
Jw013
31

Réponse courte:

Tapez ceci à l'invite:

$ kill -9 $$

Cela va tuer immédiatement votre shell sans que celui-ci puisse faire quoi que ce soit , comme intercepter le signal, sauvegarder l'historique, exécuter ~/.bash_logout, avertir des tâches arrêtées ou de ces bonnes choses.

Longue réponse:

Remarque: ces options ne s'excluent pas mutuellement. ils peuvent tous être utilisés à la fois.

Option 1:

Si vous êtes un perfectionniste lorsqu'il s'agit d'encombrer votre fichier d'historique, vous pouvez modifier la HISTIGNOREvariable pour inclure des globes de commandes que vous ne souhaitez pas enregistrer. Par exemple, si vous ajoutez HISTIGNORE='ls*:cd*'à votre ~/.bashrcpuis n'importe quelle instance de lset cdne sont pas insérés dans votre fichier d'historique.

Option 2:

Si vous souhaitez contrôler commande par commande les commandes qui restent en dehors de votre historique, vous pouvez définir HISTCONTROL='ignorespace'quelle ligne de commande doit commencer par un espace. Utiliser ignorebothsera également omettre les lignes répétées. Ensuite, si vous appuyez sur la barre d'espace avant d'entrer une commande, celle-ci ne sera pas affichée dans votre fichier historique.

Option 3:

Si vous voulez simplement faire en sorte que lorsque vous fermez le terminal, le shell quitte immédiatement, vous pouvez trapindiquer au programme que le programme du terminal envoie au shell ( xtermpar exemple, SIGHUPil attend ensuite que le shell se ferme) et permet de quitter sans sauvegarder l'historique reçoit ce signal. Ajoutez ceci à votre ~/.bashrc:

# don't record history when the window is closed
trap 'unset HISTFILE; exit' SIGHUP
amphétamachine
la source
2
+1 pour la méthode 'kill -9 $$'. C’est certainement un moyen de contourner les situations où HISTIGNORE, etc., est défini en lecture seule.
Corey Henderson
7
Je ne pense pas que ce soit une bonne idée de promouvoir l'utilisation kill -9de tout sauf des situations désastreuses où tout le reste a échoué.
Christoffer Hammarström
1
L'envoi de SIGKILL n'est jamais une bonne idée en tant que procédure standard. Utilisez les procédures appropriées, telles que la désactivation de HISTFILE.
Arcege
@Arcege TMTOWTDI.
Amphetamachine
Je voulais savoir le contraire - hélas, comment tuer Bash en s’assurant que cela sauvera son histoire - et cela répond à ma question, merci.
Mveroone
3

Je suis surpris de voir que personne n'a suggéré history -cjuste avant exit. IINM (je ne suis pas un expert) qui fera très bien l'affaire.

msh210
la source
2
Vous êtes sur la bonne voie: history -rrelisez le fichier d'historique, l'enregistrement devient donc une opération nuls.
Simon Richter
Rinçage de l’histoire est une mauvaise habitude… L’histoire du shell contient beaucoup d’informations utiles sur qui a fait quoi. c'est très utile pour les nouveaux venus sur vos plates-formes (à moins que vous ne soyez sûr à 100% de votre documentation, gestion du changement)
Franklin Piat
2

Bash utilise deux variables d’environnement pour déterminer le fichier d’historique et le nombre de lignes à écrire à la sortie du shell.

Vous pouvez jeter l'historique de votre session avec l'un de ces éléments (défini pendant la session que vous souhaitez omettre de votre fichier d'historique):

HISTFILE=/dev/null

ou

HISTSIZE=0

L’une ou l’autre de ces méthodes fonctionne bien dans Bash sur Fedora

Eli Heady
la source
1

Vous ne savez pas trop pourquoi vous vous souciez de votre historique de commandes. Si vous avez souvent besoin de certaines commandes, vous aurez peut-être plus de plaisir si vous définissez des alias pour pouvoir les récupérer avec deux séquences de touches au lieu de devoir les rechercher dans l'historique.

Simon Richter
la source
0
  1. Eli vous a déjà donné la bonne réponse pour Bash qui doit être définie HISTSIZE=0.

  2. Je voudrais juste ajouter la méthode pour le faire pour l' écran GNU . Appuyez sur Ctrl+A(séquence d'échappement d'écran) suivi de :scrollback 0. Cela supprimera l’historique de défilement. Vous pouvez maintenant faire immédiatement :scrollback 15000pour réinitialiser la taille du tampon de défilement arrière.

gsbabil
la source
Quand le PO a-t-il dit qu'il utilisait screen(1)?
Amphetamachine
Il n'a pas. Cependant, vous pouvez exécuter Bash dans une session d’écran et HISTSIZE = 0 laissera toujours les détails de votre activité dans la mémoire tampon de défilement de l’écran. Donc, si vous voulez vraiment le nettoyer, vous devez le faire scrollback=0aussi.
gsbabil
La mémoire tampon de défilement est effacée à la fermeture de la fenêtre (c'est-à-dire à la fermeture du shell). Qu'en est-il si vous avez tapé Ctrl-a H? Est-ce qu'il va tuer le fichier de log?
Amphetamachine
@amphetamachine: Nope, il ne fera que commencer / terminer la journalisation de la fenêtre en cours. Neighther Ctrl+a Hni Ctrl+a :clearva supprimer l'histoire. Vous avez besoin Ctrl+a :scrollback 0. Vous pouvez le tester vous-même. Démarrer une nouvelle session d'écran. Maintenant, fais un cat /etc/passwd. Maintenant, faites l’un des choix ci-dessus - Ctrl+a Hou Ctrl+a :clear. Maintenant, essayez de copier depuis le tampon d’écran en faisant un don Ctrl+a [suivi d’une flèche vers le haut pour aller jusqu’à voir jusqu’à quelle distance vous pouvez aller pour copier. Si vous avez fait un Ctrl+a :scrollbacksuivi d'un clear, vous n'iriez que dans la mesure où vous pouvez voir dans la fenêtre en cours car il n'y aura pas de tampon de défilement.
gsbabil