Obtenez l'historique bash pour ne vous souvenir que des commandes exécutées avec un espace préfixé!


10

Les commandes exécutées dans le terminal préfixé avec des espaces vides ne sont pas enregistrées dans le fichier d'historique des commandes. Mais existe-t-il un moyen d'obtenir l'inverse, c'est-à-dire que l'historique ne doit enregistrer que ceux qui sont préfixés par l'espace?

Réponses:


12

Vous pouvez inverser les paramètres Ubuntu par défaut en définissant deux variables (HISTIGNORE et HISTCONTROL), utilisez les commandes comme ci-dessous:

HISTIGNORE='!( *)'
HISTCONTROL=ignoredups

HISTCONTROL=ignoredupsmodifie le comportement de l'historique pour ignorer uniquement les lignes en double et ne pas ignorer les lignes commençant par un espace. (Vous pouvez également définir HISTCONTROL sur la chaîne vide (avec HISTCONTROL=) si vous souhaitez conserver les doublons, mais ce n'est généralement pas souhaité.)

HISTIGNORE='!( *)'fait que l'histoire ignore toutes les lignes qui ne commencent pas par un espace: ( *)correspondrait à chaque ligne commençant par un espace, mais le !début annule la correspondance, donc il correspond à tout ce qui ne commence pas par un espace. Et tout ce qui correspond au motif HISTIGNORE sera ignoré par l'histoire. (Cette dernière option nécessite que bash soit exécuté avec extglobactivé, avec shopt -s extglob, mais c'est le paramètre par défaut sur Ubuntu.)

Si vous voulez rendre cela permanent, n'oubliez pas de mettre les deux commandes ci-dessus dans votre ~/.bashrc.


merci, c'est exactement ce que je voulais ... j'ai sauvegardé les changements dans .bashrc... J'en avais besoin pour empêcher bash d'enregistrer tous les cds, lss et autres commandes de tous les jours que j'utilise; et pour ces quelques commandes dont j'ai besoin dans l'histoire, je peux maintenant utiliser le préfixe ..
précis

1
@rusty Si vous souhaitez uniquement exclure certaines commandes triviales, il pourrait être préférable pour vous si vous utilisez quelque chose comme cela HISTIGNORE='ls*:cd*', qui fera que l'historique ignorera chaque ligne commençant par lsou cd, vous pouvez étendre cette liste avec d'autres commandes, il suffit de mettre un :entre les commandes . Mais n'oubliez pas que la fonction de rappel de commande à laquelle vous pouvez accéder par la "touche flèche vers le haut" utilise également cet historique, donc si vous définissez quelque chose à ignorer, vous ne pourrez pas rappeler ces commandes ignorées avec la " flèche vers le haut".
fauconnier

Je voulais ignorer toute commande SSH, mais pas les commandes comme ssh-copy-idou ssh-keygen. Dans HISTIGNORE, j'ai inclus " ssh\ *" avec mes autres commandes ignorées. Échapper au caractère d'espace semble être obligatoire.
user38537

2

" Les commandes exécutées dans le terminal préfixé avec des espaces vides ne sont pas enregistrées dans le fichier d'historique des commandes "

Oui, ils sont.

histoire du terminal


1
c'est un réglage en bash ;-)
Rinzwind

commande préfixée avec des espaces vides. Comme `sudo apt-get update`
Avinash Raj

Quelle est la valeur de votre variable HISTCONTROL?
glenn jackman

@AvinashRaj: ouais, voyez-moi commander "cela ne doit pas être enregistré", j'ai mis un espace (visible à la fois dans la ligne de commande et dans l'historique). Donc ça ne marche pas comme ça. Vous pouvez peut-être le configurer (avec HISTCONTROL); mais ce n'est pas le cas par défaut.
MrVaykadji
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.