Selektive Befehlshistorie im Terminal?

9

Wenn Sie innerhalb eines Terminals auf Ihrer Tastatur nach oben drücken, werden die vorherigen Befehle angezeigt, die Sie zuvor in der angegebenen Reihenfolge eingegeben haben. Ich habe mich gefragt, ob es eine Möglichkeit gibt, nur die Befehle in der Vergangenheit zu sehen, beginnend mit -l zum Beispiel "ls -l". Auf diese Weise lautet die Liste der Befehle:

  1. ls -l -a
  2. cmake
  3. cd ~ / Desktop
  4. cmake

Eine Möglichkeit, einfach "ls" und tab zu schreiben oder eine beliebige Kombination von Tastenanschlägen, die erforderlich ist, um den letzten Befehl aufzurufen, der dem Terminal nachgibt, beginnend mit "ls".

Vielen Dank,

jlo
quelle

Antworten:

13

Es werden nicht nur Dinge angezeigt, die mit beginnen ls, sondern Sie können Ctrl-R lsauch eine Rückwärtssuche im Verlauf durchführen. Wiederholen Sie diesen Vorgang Ctrl-R, um die nächste Übereinstimmung zu finden.

Poolie
quelle
Vielen Dank für den CTRL+RVerknüpfungsbefehl.
Kleber S.
8

Manchmal ist es nützlich, dies zu haben ...

Beispiel

Herstellen einer Verbindung zu einem anderen Computer mit ssh:

anfangen zu tippen

ssh

Verwenden Sie die PgUpTaste und Ihr SSH endet mit Ihrem zuletzt verwendeten ... Drücken Sie PgUperneut und Sie erhalten den nächsten und so weiter. Mag ich?

Sie können dies verwenden:

Bearbeiten Sie Ihre .bashrc ( vi /home/<yourfolder>/.bashrc) und fügen Sie Folgendes hinzu:

$if Bash
    # Search history back and forward using page-up and page-down
    "\e[5~": history-search-backward
    "\e[6~": history-search-forward

    # Completion
    set match-hidden-files off
    set page-completions off
    set completion-query-items 350
    set show-all-if-ambiguous on

$endif

Dies fügt dem Terminal Ihres Benutzers nur diese Funktion hinzu. Sie müssen auch das Root-Verzeichnis bearbeiten, um dasselbe zu erhalten: Sie können diesem Tutorial aus dem Wiki folgen. Es gibt keine Möglichkeit, etwas falsch zu machen. Außerdem gibt es viele zusätzliche Dinge, um Ihre Terminal-Erfahrung zu verbessern.

maniat1k
quelle
Sie können es sogar an die Aufwärts- / Abwärtspfeiltasten binden bind '"\e[A": history-search-backward'; bind '"\e[B": history-search-forward', wodurch es noch intuitiver wird.
Fritz
5

Verwenden Sie zum Anzeigen des Befehlsverlaufs Folgendes:

$ history

Wenn Sie nur möchten, dass der vergangene Befehl beispielsweise mit "ls" beginnt, verwende ich meiner Meinung nach:

$ history | grep ls

Sicherlich wird die Ausgabe etwas enthalten, das kein Befehl ist, sondern "ls" -Zeichen, aber ich denke, es kann helfen.

neo0
quelle
2

Der einfachste Weg, um das zu erreichen, was Sie wollen, ist der !<whatever-command>. Um beispielsweise das auszuführen ls, was Sie zuletzt ausgeführt haben, können Sie a !ls. Sehen Sie sich das folgende Protokoll an, um festzustellen, ob Sie dies benötigen:

nits@nits-excalibur:~$ ls /mnt/Storage_1/Music/
Music I  Music II  Music III  Music IV  Music V  Music_VI
nits@nits-excalibur:~$ cd Documents/
nits@nits-excalibur:~/Documents$ top
nits@nits-excalibur:~/Documents$ !ls
ls /mnt/Storage_1/Music/
Music I  Music II  Music III  Music IV  Music V  Music_VI
Nitin Venkatesh
quelle
1
Dadurch wird der Befehl ausgeführt, ohne ihn anzuzeigen. Gibt es eine Alternative, die ihn als angefordertes OP anzeigt?
Bruno Pereira
In zsh können Sie setopt HIST_VERIFYund der Befehl wird in Ihren Eingabepuffer gestellt, wo Sie entweder die Eingabetaste drücken können, um ihn zu akzeptieren, oder ihn bearbeiten können.
Poolie
1

Der Verlauf befindet sich ~ / .bash_history. Um einen ordentlichen Trick zum Durchsuchen Ihres Bash-Verlaufs zu erhalten, drücken Sie Strg + R und geben Sie den Anfang des gewünschten Befehls ein.

und http://ubuntuforums.org/showthread.php?t=204382 für praktische Befehlszeilen-Aliase und Tricks

Ringtail
quelle