ich benutzte
history | less
Um die Zeilen der vorherigen Befehle zu erhalten und aus den Zahlen auf der linken Seite, fand ich die Zeile, die ich wiederholen wollte (zB 22) und tat es
!22
an der Eingabeaufforderung und es funktionierte - Ausführen der Reihe von Befehlen in der Zeile, die ich zu dieser Zeit tat. Ich kann nicht herausfinden, wo das Ausrufezeichen verwendet wird, was es in Bezug auf die von bash durchgeführten Aktionen darstellt und wo es verwendet werden soll. Aus der Dokumentation sehe ich keine Erklärung, die "greifbar" ist.
Antworten:
!
ist eine Funktion, die ursprünglich in der C-Shell vorkam , bevor man sich auf Terminals mit Pfeiltasten verlassen konnte. Es ist besonders nützlich, wenn Sie die aktuelle Befehlsnummer zur Eingabeaufforderung (PS1="\!$ "
) hinzufügen, damit Sie schnell auf Ihren Bildschirm schauen können, um Nummern für frühere Befehle abzurufen.Jetzt, da Sie Pfeiltasten verwenden können und Dinge wie Ctrl-Rdas Durchsuchen des Befehlsverlaufs, sehe ich keine große Verwendung für die Funktion.
Eine Variante, die Sie vielleicht immer noch nützlich finden, ist die
!!
, bei der der vorherige Befehl erneut ausgeführt wird. Auf seinem eigenen, finde ich nicht !!Enterschneller als gerade ↑ Enter, aber es kann hilfreich sein , wenn sie in einen größeren Befehl kombiniert.Beispiel: Ein häufiger Pilotfehler auf
sudo
basierten Systemen besteht darin, dassudo
Präfix eines Befehls zu vergessen, für den zusätzliche Berechtigungen erforderlich sind. Ein Anfänger gibt den gesamten Befehl erneut ein. Der fleißige Schüler bearbeitet den Befehl aus dem Befehlsverlauf der Shell. Der Erleuchtete tipptsudo !!
.Mit Bash können Sie die
!
Verarbeitung in der Shell mitset +o histexpand
oder deaktivierenset +H
. Du kannst es in Zsh mit deaktivierenset -K
.quelle
sudo
oder so), können Sie diessudo !!
zum Beispiel tun . Das ist vielleicht etwas schneller als "Nach oben / Strg-A (oder nach Hause, wenn Sie Glück haben) / sudo / space / enter". YMMV. :)echo 'Hi!'
oderecho "Hi!"
oderecho Hi\!
. Alle machen das Gleiche.setopt NO_BANG_HIST
in zsh könnte einprägsamer sein als-K
.Wenn es hier keine längere Antwort gibt, gibt es auf jeden Fall eine für Super User, da ich vor kurzem eine gelesen habe. In der Bash-Manpage finden Sie einen riesigen Abschnitt mit dem Titel HISTORY EXPANSION zu diesem Thema.
Sie können einen ganzen Host mehr als nur den letzten Befehl oder Befehl Nummer X
!cat
ausführen. Sie können Dinge tun, wie den letzten Befehl auszuführen, mit dem begonnen wurdecat
. Oder!?bash?:s/bash/csh/
führt den letzten Befehl aus, der enthält, ihnbash
aber durch ersetztcsh
.quelle
!!:s/bash/csh/
führt tatsächlich den letzten Befehl aus und ersetzt bash durch csh, falls vorhanden. Nicht der letzte Befehl, der Bash enthielt. Das wäre!?bash?:s/bash/csh/
oder vielleicht!?bash?:s/%/csh/
man
Seiten geblättert habe , ist diese Funktion unglaublich undurchsichtig. Vielen Dank, dass Sie auf den relevanten Abschnitt hingewiesen haben. Dies ist die einzige Stelle in den aktuellen Dokumenten, an der sie ihn ausreichend erläutern.Es kann noch viel mehr getan werden mit
!
:!-3
!ls
und vieles mehr. Siehe 15 Linux Bash History-Erweiterungsbeispiele, die Sie kennen sollten
quelle
Ein Freund von mir hat mir Folgendes per E-Mail geschickt:
quelle
Natürlich können Sie
!!
den letzten Befehl in der Bash-Shell wiederverwenden. Und dann müssen Sie!$
den letzten Teil Ihres letzten Befehls wiederverwenden.zB eine Datei ansehen
Wenn Sie jetzt dieselbe Datei bearbeiten möchten, können Sie
!$
nur den Dateipfad des letzten Befehls abrufenquelle
$touch f1 f2
und wird dann$vim !$
auswerten$vim f2