[shell] Quelques commandes bash en dehors du .bash_history
Un petit tuyau, probablement déjà très connu mais utile tout de même : si vous souhaitez tapez une commande sans qu’elle apparaisse dans le .bash_history, vous pouvez taper depuis bash (interpréteur de commande par défaut lorsque vous utilisez une console/un terminal sous GNU/Linux) :
`cat `
ou $( cat )
Puis [Ctrl]+[D] une fois que vous êtes prêt à exécuter.
(Attention, ne pas se tromper avec les différents guillemets, faites soit un copier-coller, soit [Alt-Gr] avec le symbole sous la touche “7″ au dessus des lettres pour un clavier azerty.)
Tapez ensuite votre commande !
Qu’est-ce que cela fait exactement ?
Si vous tapez cat tout seul, cat redirige l’entrée standard (le clavier) vers la sortie standard (l’écran). Vous connaissez surement le principe des redirections (avec “<”, “>”, et “>>”) et des “pipes” (avec “|”)? Bien en fait ` COMMANDE ` est similaire : la sortie de COMMANDE est exploitée comme si elle avait été saisie dans la ligne à l’invite de l’interpréteur de commande.
Un exemple :
mkdir temp-` date +%Y%m%d_%H%M%S`
(Pour créer un dossier temporaire “horodaté”, note : vous pouvez utiliser ça dans un script bien entendu…)
Une fois cela compris, vous devriez comprendre la logique derrière ` cat`…
Limitations :
- Une seule commande à la fois, le point-virgule ou le retour à la ligne n’y changeant rien…
- En examinant .bash_history, on sait quelque chose est camouflé (on ne sait juste pas quoi) : on y voit ` cat` sans savoir ce qui a été réellement fait…
- N’utilisez jamais ça pour passer des mots de passe ou données sensibles en ligne de commande : en accédant à la liste des processus (avec ps par exemple) au bon moment, tout est grillé !
- Il est possible de lancer bash (éventuellement depuis bash lui même) en lui indiquant de ne pas sauvegarder d’historique !
- De nombreux programmes en apparence innocents (tel que vim, emacs) permettent d’exécuter des commandes directement, sans les mettre dans le .bash_history , ce qui limite l’intérêt de la méthode décrite…
En bref, vous l’aurez sûrement compris ce post a plus pour but d’attirer votre attention sur la “command substitution” de l’interpréteur bash à l’aide de quelques exemples pratiques…
Vous trouverez bien sûr dans le manuel de référence de bash, bien plus pour satisfaire votre curiosité…
Autres petits trucs sur bash sur ce (we)blog:
- le “reverse i-search” avec [Ctrl]+[R] : je ne peux pas m’en passer !
- créer un répertoire et des (sous-…-) sous répertoires en un seul coup avec mkdir -p

Salut,
Pour decider ce qui va dans le .bash_history, il vaut mieux utiliser la variable d’environnement HISTIGNORE, voir le man c’est encore mieux que la référence de bash :-)
Oui c’est une solution comme une autre.
Par contre, je ne vois pas du tout en quoi la page man serait mieux que le manuel de référence de bash (si j’ai bien saisi ton commentaire).
D’ailleurs celui-ci est disponible en une seule page HTML (pratique des fois pour rechercher simplement) ou plusieurs (plus pratique la plupart du temps), mais aussi dans d’autres formats, ce qui permet de se passer de navigateur HTML ;) (Cependant, je ne pense pas que ton objection soit sur ce point.)
Si tu veux lancer plusieurs commandes dans un $(), il suffit d’utiliser les {} dedans, exemple : $({echo ls; echo ~})
david@david-hostname:~$ $({echo ls; echo ~}) bash: {echo: command not found bash: ~}: command not foundHum ça n’a pas trop l’air de marcher chez moi…
Par contre :
Ou autre exemple :
Par contre dans tous les cas présentés ici (et avec le
$(cat)) la commande effectuée après substitution est unique. (Bien qu’il y ait moyen de bidouiller pour exécuter plus d’une commande.)