Der history
Befehl listet den gesamten Verlauf für die aktuelle Sitzung auf. Mögen:
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
Um Elemente von Interesse suchen, kann ich Rohr history
mit grep
wie
history | grep ls
1 ls
6 ls
10 ls
Ich kann auch die letzten 3 Befehle anzeigen wie:
history 3
11 history
12 history | grep ls
13 history 3
Aber wie komme ich zu einem bestimmten Bereich der Geschichte? Zum Beispiel so etwas wie:
history range 4 7
4 cd something
5 touch afile
6 ls
7 cd ..
bash
command-history
Slartibartfast
quelle
quelle
x
Befehle auflisten und dann weiterleitenhead
.history | grep something
zeigt Ergebnisse von Befehlen, die123 234 345
im Verlauf nummeriert sind, und ich kenne möglicherweise nicht die Nummer des zuletzt ausgeführten Befehls (history
in diesem Fall). Mein letzter Befehl könnte 400, 500 oder was auch immer sein. Also muss ich zuerst diese Nummer überprüfen, den Unterschied herausfinden, die letztenx
Befehle auflisten und dannhead
Antworten:
Stattdessen
history
können Sie verwendenfc
, mit denen Sie den Bereich auswählen können:quelle
fc -l -16 -10
.Wenn Sie den Befehl history verwenden müssen , leiten Sie ihn durch sed oder awk:
Andernfalls ist die Antwort von cuonglm die bessere Option.
quelle
head
undtail
dieses Problem auf eine noch weniger elegante Weise lösen. Für den Bereich 10 -> 25 müssten Sie verwendenhistory | head 25 | tail 15
.Die Verwendung von history mit einem Grep in den Zeilennummern um den gesuchten Befehl funktioniert am besten für mich.
Zum Beispiel suche ich nach dem, was ich gemacht habe, ungefähr
ping mybox
20 Zeilen.$ history | grep "ping mybox" 20325 ping mybox
Das ist die Zeile,
20325
also muss ich die Zeilen nur mit einer Zahl im[20320..20339]
Bereich beginnen.$ history | grep ^203[2-3][0-9]
quelle