Je veux exécuter certaines commandes mais je ne veux pas les stocker dans l'historique des commandes. Pour que personne ne puisse le rechercher dans le .bash_history
fichier.
Existe-t-il un moyen d'exécuter les commandes bash de cette façon?
Je veux exécuter certaines commandes mais je ne veux pas les stocker dans l'historique des commandes. Pour que personne ne puisse le rechercher dans le .bash_history
fichier.
Existe-t-il un moyen d'exécuter les commandes bash de cette façon?
Réponses:
Commencez votre commande avec un espace et il ne sera pas inclus dans l'historique.
N'oubliez pas que cela nécessite la $HISTCONTROL
définition de la variable d'environnement .
Vérifiez que la commande suivante renvoie ignorespace
ou
ignoreboth
#> echo $HISTCONTROL
Pour ajouter la variable d'environnement si elle est manquante, la ligne suivante peut être ajoutée au profil bash. Par exemple%HOME/.bashrc
export HISTCONTROL=ignorespace
Une fois que le profil a été récupéré, les commandes préfixées par l'espace ne seront pas écrites dans $HISTFILE
Dans une session Bash donnée, définissez le fichier d'historique sur / dev / null en tapant:
export HISTFILE=/dev/null
Notez que, comme indiqué dans les commentaires, cela n'écrira aucune commande de cette session dans l'historique!
Ne jouez pas avec le travail acharné de votre administrateur système, s'il vous plaît;)
La solution de Doodad est plus élégante. Désactivez simplement la variable: unset HISTFILE
(merci!)
/dev/null
autorisations définies sur 0600 à la déconnexion. Au lieu de cela, j'ai utilisé unset HISTFILE
.
Une extension de la réponse de @John Doe & @ user3270492. Mais cela semble fonctionner pour moi.
<your_secret_command>; history -d $((HISTCMD-1))
Vous ne devriez pas voir l'entrée de la commande dans votre historique.
Voici l'explication ..
'History -d' supprime l'entrée mentionnée de l'historique.
Le HISTCMD stocke le numéro de commande de celui à exécuter ensuite. Ainsi, (HISTCMD-1) fait référence à la dernière commande exécutée.
Vous pourriez envisager d'utiliser un shell sans historique, comme peut-être
/bin/sh << END
your commands without history
END
(peut /bin/dash
- être ou /bin/sash
pourrait être plus approprié que /bin/sh
)
ou encore mieux utiliser l' utilitaire batch par exemple
batch << EOB
your commands
EOB
L'histoire contiendrait alors sh
ou batch
qui n'a pas beaucoup de sens
Vous pouvez commencer votre session avec
export HISTFILE=/dev/null ;history -d $(history 1)
puis procédez à vos actions sournoises. La définition du fichier historique sur /dev/null
sera enregistrée dans le fichier historique, mais cette entrée sera facilement supprimée et aucune trace (au moins dans le fichier historique) ne sera affichée.
De plus, ce n'est pas permanent.
Comme mentionné par Doodad dans les commentaires , le unset HISTFILE
fait bien, mais si vous souhaitez également supprimer un historique, faites echo $HISTFILE
pour obtenir l'emplacement du fichier d'historique (généralement ~/.bash_history
) unset HISTFILE
et éditez ~/.bash_history
(ou ce qui HISTFILE
était - bien sûr, c'est maintenant unset
pour que vous puissiez '' t le lire).
$ echo $HISTFILE # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history # Or your preferred editor
Ensuite, vous avez modifié votre historique et le fait que vous l'ayez modifié!
unset HISTFILE; echo TEST; history
vous donnera la commande echo TEST
comme la précédente au dernier. Bien qu'après avoir mis fin à la session et se reconnecter, l'historique n'a pas cette entrée en effet. Je dirais donc que cela fonctionne :)
unset HISTFILE
ne semble pas arrêter l'enregistrement des commandes dans l'historique en mémoire, mais il les empêche d'être enregistrées dans le fichier $ HISTFILE. Donc je suppose que vous avez toujours votre historique local en mémoire, mais il n'est plus enregistré dans un fichier, ce que vous pourriez souhaiter! ;)
Vous pouvez également utiliser la commande suivante:
echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')
Je pense que c'est une commande très portable.
alias forget="history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')"
et maintenant vous pouvez le faire quelque chose comme ceci:mysql -uroot -pSecretPassword ; forget
$s
et d'autres choses dans sed. function forget() { // put code here // }
Si vous utilisez zsh, vous pouvez exécuter:
setopt histignorespace
Une fois ce paramètre défini, chaque commande commençant par un espace sera exclue de l'historique.
Vous pouvez utiliser des alias dans .zshrc
pour activer cette marche / arrêt :
# Toggle ignore-space. Useful when entering passwords.
alias history-ignore-space-on='\
setopt hist_ignore_space;\
echo "Commands starting with space are now EXCLUDED from history."'
alias history-ignore-space-off='\
unsetopt hist_ignore_space;\
echo "Commands starting with space are now ADDED to history."'
Il existe plusieurs façons d'y parvenir. Cela définit la taille du fichier d'historique à 0:
export HISTFILESIZE=0
Cela définit le fichier d'historique /dev/null
et le désactive efficacement:
export HISTFILE=/dev/null
Pour les commandes individuelles, vous pouvez préfixer la commande avec un espace et elle ne sera pas enregistrée dans le fichier historique. Notez que cela nécessite que vous ayez la ignorespace
valeur incluse dans la $HISTCONTROL
variable d'environnement (man bash et recherchez ignorespace
plus de détails).
Vous avez juste besoin de lancer:
$ set +o history
Pour en savoir plus, exécutez:
$ man set
set -x history
par la suite, cela fonctionne.
Cette commande pourrait être utile. Cela n'enregistrera pas la commande qui est exécutée
history -d $((HISTCMD-1)) && <Your Command Here>