La history
commande répertorie tout l'historique de la session en cours. Comme:
1 ls
2 cd /root
3 mkdir something
4 cd something
5 touch afile
6 ls
7 cd ..
8 rm something/afile
9 cd ..
10 ls
11 history
Pour rechercher des éléments d'intérêt, je peux tuyau history
avec grep
comme
history | grep ls
1 ls
6 ls
10 ls
Je peux également voir les 3 dernières commandes comme:
history 3
11 history
12 history | grep ls
13 history 3
Mais comment puis-je obtenir un historique spécifique? Par exemple quelque chose comme:
history range 4 7
4 cd something
5 touch afile
6 ls
7 cd ..
bash
command-history
Slartibartfast
la source
la source
x
commandes, puis rediriger vershead
.history | grep something
affiche les résultats des commandes numérotées123 234 345
dans l'historique et je ne connais peut-être pas le numéro de la dernière commande exécutée (history
dans ce cas). Ma dernière commande pourrait être numérotée 400, 500 ou autre. Donc, je dois d'abord vérifier ce nombre, comprendre la différence, répertorier les dernièresx
commandes, puis diriger vershead
Réponses:
Au lieu de
history
, vous pouvez utiliserfc
ce qui vous permet de sélectionner une plage:la source
fc -l -16 -10
.Si vous devez utiliser la commande history, dirigez-la via sed ou awk:
Sinon, la réponse de cuonglm est une meilleure option.
la source
head
ettail
résoudrait ce problème d'une manière encore moins élégante. Pour la plage 10-> 25, vous devez utiliserhistory | head 25 | tail 15
.L'utilisation de l'historique avec un grep sur les numéros de ligne autour de la commande que je recherche fonctionne le mieux pour moi.
Par exemple, je cherche ce que j'ai fait autour
ping mybox
, plus ou moins 20 lignes.$ history | grep "ping mybox" 20325 ping mybox
C'est la ligne,
20325
donc je dois juste grep les lignes commençant par un nombre dans la[20320..20339]
plage.$ history | grep ^203[2-3][0-9]
la source