Existe-t-il un moyen de suspendre temporairement le suivi de l'historique en bash, afin d'entrer dans une sorte de mode "incognito"? J'entre dans mon terminal des informations que je ne veux pas enregistrer d'informations financières sensibles.
Cela devrait être ce que vous recherchez:
unset HISTFILE
man bash
Si HISTFILE n'est pas défini ou si le fichier d'historique n'est pas accessible en écriture, l'historique n'est pas enregistré.
Alternativement, si vous souhaitez le désactiver puis le réactiver, il peut être plus facile à utiliser set
:
set +o history
set -o history
En utilisant bash, définissez HISTCONTROL="ignorespace"
et précédez d'un espace toute commande que vous ne souhaitez pas enregistrer dans l'historique. Si vous avez oublié de prendre des mesures, il existe également history -d <number>
pour supprimer une entrée spécifique ou history -c
pour effacer tout l'historique des commandes.
Assurez-vous que HISTCONTROL
contient ignorespace
. Vous voudrez probablement ajouter HISTCONTROL=ignorespace
(ou HISTCONTROL=ignoredups:ignorespace
ou quelque chose) à votre ~/.bashrc
. Ensuite, toute ligne de commande commençant par un espace est omise de l'historique.
Une autre possibilité est de démarrer une nouvelle session bash qui ne sauvegarde pas son historique.
$ bash
$ unset HISTFILE
$ sooper-sekret-command
$ exit
$ #back in the parent Shell
Si vous devez éviter de stocker plusieurs commandes et que vous souhaitez toujours utiliser la flèche vers le haut pour accéder aux commandes précédentes, utilisez:
$ bash # open a new session.
$ unset HISTFILE # avoid recording commands to file.
$ commands not recorded
.
.
$ exit
$
Il existe quatre façons (niveaux) de contrôler la façon dont les commandes sont stockées.
La première et la plus simple consiste à utiliser ignorespace
(ou ignorer les deux):
$ HISTCONTROL="ignorespace${HISTCONTROL:+:$HISTCONTROL}"
Cela permettra d'utiliser un espace avant les commandes que vous souhaitez éviter d'être enregistré dans la liste mémoire de history
. Et, en conséquence, comme aucune commande enregistrée en mémoire ne peut être envoyée au fichier, elle évitera également one la commande à envoyer au fichier répertorié dans $HISFILE
.
Évitez d'enregistrer des commandes dans le fichier dans $HISTFILE
:
$ unset HISTFILE
S'il n'est pas défini, l'historique des commandes n'est pas enregistré à la fermeture d'un shell.
Nul HISTFILE=''
et/ou réglé sur HISTFILE=/dev/null
fonctionne dans le même sens. Comprenez que les commandes sont toujours enregistrées dans la liste de mémoire, essayez la commande history
ou la flèche vers le haut.
Avertissement: si HISTFILE est réinitialisé avant que le Shell n'existe, tout ce qui a été enregistré en mémoire peut quand même être écrit dans le fichier.
Évitez d'enregistrer les commandes new dans la liste d'historique en mémoire. Et, comme n'étant pas en mémoire, ne peut pas être enregistré dans un fichier.
$ shopt -ou history # or set +o history
Réactivez avec shopt -os history
(ou set -o history
)
Supprimez toutes les commandes de la liste d'historique en mémoire:
$ HISTSIZE=0
Toutes les commandes sont effacées (de la mémoire) et, par conséquent, rien ne peut être stocké dans un fichier, bien sûr, jusqu'à ce que la variable soit à nouveau définie sur une valeur numérique valide.
Il existe un moyen simple de désactiver l'historique, de sorte que les commandes ne seront pas stockées dans le .bash_history
fichier.
Vous devez placer l'espace blanc ou l'espace de tabulation devant toute commande, afin que cette commande ne soit pas stockée dans l'historique. Par exemple:
$ ls
print the list of file
$ history
ls
history
$ pwd
print the current working directory
$ history
ls
history
La commande pwd
ne sera pas enregistrée dans l'historique, car elle contient des espaces à l'avant.
export HISTFILE=/dev/null
C'est ma façon d'aller. Juste au cas où le HISTORY/HISTFILE/HISTCONTROL non défini, etc. ne fonctionne pas, l'exporter vers/dev/null a toujours fonctionné pour moi.
Pour aller un peu plus loin dans la réponse de SiegeX et en faire vraiment un mode incognito ...
Avertissement: le titre sera probablement en cours de travail sur gnome-terminal. il n'a été testé que dans Linux Mint 19.3/Gnome Terminal 3.28.1 parce que je suis paresseux.
Ajoutez ce qui suit à votre ~/.bash_functions
(Cela suppose que vous l'importez via votre .bashrc
/.profile
Etc.):
function setGnomeTerminalTitle() {
local NEW_TITLE="$1";
PS1="\[\e]0;${NEW_TITLE}\a\]\${debian_chroot:+(\$debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\] \[\033[01;34m\]\w \$\[\033[00m\]";
}
Ajoutez ensuite ce qui suit à votre ~/.bash_aliases
(Encore une fois, cela suppose que vous l'importez via votre .bashrc
/.profile
Etc.):
alias title="setGnomeTerminalTitle";
alias hist='history'
alias histoff="setGnomeTerminalTitle 'Incognito Window' && set +o history"
alias histon="setGnomeTerminalTitle \"$USER@$HOSTNAME:\${PWD//\${HOME//\\//\\\\\\/}/\\~}\" && set -o history"
EDIT: pour expliquer le contenu du titre histon - normalement le titre de la fenêtre dans gnome-terminal est "$ USER @ $ HOSTNAME: $ {PWD}" sauf que si vous êtes dans votre dossier personnel,/home/foo, il s'affiche comme ~
; au moins, c'est sur mon ordinateur. cette commande utilise des substitutions de chaînes bash pour échapper aux barres obliques dans $HOME
, nous obtenons donc \/home\/foo
, puis en utilisant cela comme expression régulière pour remplacer ce modèle dans $PWD
par un littéral ~
... puis un tas d'échappements sont ajoutés en haut pour le faire fonctionner comme un alias dans une chaîne entre guillemets.
Maintenant, lorsque vous tapez histoff
, vous obtenez un changement de titre pour le mode navigation privée et votre historique est arrêté pour cette session dans cette fenêtre (le mot histoff
est toujours enregistré mais rien après). Si vous tapez ensuite histon
, le titre est rétabli et toutes les lignes après histoff
jusqu'à et y compris la ligne avec histon
ne sont pas enregistrées mais tout après histon
est enregistré.
Exemple:
## this is still logged
histoff
## this is NOT logged
echo "my password is: password";
fake_ua='If firefox and curl had a child, would it be named furl?';
curl -A "$fake_ua" https://www.itsnotap0rnsiteipromise.com/curvy-girlz/;
vi ~/Documents/maths/super-secret-squirrel/gift-ideas.txt
## this is still NOT logged
histon
## this is logged again
Sudo apt install -y kmag;