Par exemple:
[root@ip-10-0-7-125 ~]# history | grep free
594 free -m
634 free -m | xargs | awk '{print "free/total memory" $17 " / " $ 8}'
635 free -m
636 free -m | xargs | awk '{print "free/total memory" $9 " / " $ 10}'
736 df -h | xargs | awk '{print "free/total disk: " $11 " / " $9}'
740 df -h | xargs | awk '{print "free/total disk: " $11 " / " $8}'
741 free -m | xargs | awk '{print "free/total memory: " $17 " / " $8 " MB"}'
Je me demande simplement s'il existe un moyen d'exécuter la commande 636 sans la taper à nouveau, il suffit de taper quelque chose plus le nombre, comme l'historique 636 ou quelque chose.
En bash, juste !636
sera OK.
Oui, cela s'appelle "expansion de l'histoire". Voir
LESS='+/^HISTORY EXPANSION' man bash
pour plus de détails.
L'utilisation d'un point d'exclamation suivi d'un nombre est sans doute l'utilisation la plus simple:
!636
Cependant, vous pouvez également exécuter directement la dernière commande exécutée sans connaître son numéro d'historique:
!!
Ou vous pouvez exécuter deux commandes en arrière:
!-2
La forme que j'utilise le plus souvent, cependant, est de répéter le dernier argument de la dernière commande:
echo this text goes into a file > /tmp/afile.txt
cat !$
Ou, disons que j'inspecte un fichier. En utilisant la complétion d'onglet, je pourrais faire ce qui suit:
ls -l /really/long/path/to/some/file
less !$
Encore une fois, lire la page de manuel pour plus de détails:
LESS='+/^HISTORY EXPANSION' man bash
Un joli, si vous ne voulez pas faire un premier historique, notez le numéro, etc:
en bash (et peut-être d'autres):
ctrl-r something
(ctrl-r
= "recherche inversée interactive") (something
= une partie d'une commande précédente)
Cela vous montrera la dernière ligne d'historique contenant something
. Pour obtenir celui d'avant, refaites ctrl-r (seul), chaque fois qu'il obtient une ligne précédente.
ex:
ctrl-r 10
pour afficher la dernière ligne d'historique contenant '10' (par exemple la ligne avec $10
, dans votre exemple), et ctrl-r
jusqu'à ce que vous récupériez la ligne d'historique que vous cherchiez
Lorsque la ligne souhaitée apparaît, il suffit de Enter
pour l'exécuter (ou vous pouvez également la modifier en utilisant le arrow keys
, backspace
et ctrl-a
pour aller au début de la ligne, ctrl-e
pour arriver à la fin, ctrl-k
: pour "tuer" du curseur à la fin de la ligne (= supprime + l'enregistre dans un tampon), ctrl-y
: pour restaurer, à partir du tampon, un bit précédemment tué, etc.)
Si vous souhaitez rechercher en avant (ctrl-s), vous devez d'abord désactiver XON : voir https://stackoverflow.com/ a/791800/18415 :
"juste pour désactiver XON/XOFF en exécutant
stty -ixon
"(et ensuite vous pourrez utiliser ctrl-s, sans le faire figer le terminal)
Vous pouvez utiliser le shell intégré fc:
fc -s 636
Il y a HSTR
- hh
commande pour bash
et zsh
sélection de commande interactive, meilleure que la recherche inversée Ctrl-R:
son interactif, de sorte que vous pouvez rechercher et modifier la commande, avant de l'exécuter.
Sur Ubuntu, vous pouvez installer hh
avec le one-liner suivant:
Sudo add-apt-repository ppa:ultradvorka/ppa && Sudo apt-get update && Sudo apt-get install hh && hh --show-configuration >> ~/.bashrc
ou pas à pas:
Sudo add-apt-repository ppa:ultradvorka/ppa
Sudo apt-get update
Sudo apt-get install hh
Installez hh
sur Fedora, RHEL ou CentOS:
Sudo dnf|yum install hstr -y
Sur macOS avec homebrew
:
brew install hh
... puis configurez-le avec:
hh --show-configuration >> ~/.bashrc
Cela remplacera le comportement Ctrl-R par défaut.
Courir hh --show-configuration
pour déterminer ce qui sera ajouté à votre profil Bash.
Plus d'options de configuration disponibles sur la page d'accueil du projet sur Github: https://github.com/dvorka/hstr