Bash
Bash History Substitutionen
Suche…
Mit! $
Sie können das !$
Verwenden, um Wiederholungen zu reduzieren, wenn Sie die Befehlszeile verwenden:
$ echo ping
ping
$ echo !$
ping
Sie können auch auf der Wiederholung aufbauen
$ echo !$ pong
ping pong
$ echo !$, a great game
pong, a great game
Beachten Sie, dass wir im letzten Beispiel kein ping pong, a great game
erhalten haben ping pong, a great game
da das letzte Argument, das an den vorherigen Befehl übergeben wurde, pong
war. Wir können ein Problem wie dieses vermeiden, indem Sie Anführungszeichen hinzufügen. Um mit dem Beispiel fortzufahren, war unser letztes Argument das game
:
$ echo "it is !$ time"
it is game time
$ echo "hooray, !$!"
hooray, it is game time!
Kurzübersicht
Interaktion mit der Geschichte
# List all previous commands
history
# Clear the history, useful if you entered a password by accident
history -c
Veranstaltungsbezeichner
# Expands to line n of bash history
!n
# Expands to last command
!!
# Expands to last command starting with "text"
!text
# Expands to last command containing "text"
!?text
# Expands to command n lines ago
!-n
# Expands to last command with first occurrence of "foo" replaced by "bar"
^foo^bar^
# Expands to the current command
!#
Wortbezeichner
Diese werden getrennt durch :
vom Ereignisbezeichner, auf den sie sich beziehen. Der Doppelpunkt kann weggelassen werden, wenn der Wortbezeichner nicht mit einer Zahl beginnt !^
Ist das gleiche wie !:^
.
# Expands to the first argument of the most recent command
!^
# Expands to the last argument of the most recent command (short for !!:$)
!$
# Expands to the third argument of the most recent command
!:3
# Expands to arguments x through y (inclusive) of the last command
# x and y can be numbers or the anchor characters ^ $
!:x-y
# Expands to all words of the last command except the 0th
# Equivalent to :^-$
!*
Modifikatoren
Diese ändern den vorhergehenden Ereignis- oder Wortbezeichner.
# Replacement in the expansion using sed syntax
# Allows flags before the s and alternate separators
:s/foo/bar/ #substitutes bar for first occurrence of foo
:gs|foo|bar| #substitutes bar for all foo
# Remove leading path from last argument ("tail")
:t
# Remove trailing path from last argument ("head")
:h
# Remove file extension from last argument
:r
Wenn die Bash-Variable HISTCONTROL
entweder ignorespace
oder ignoreboth
(oder alternativ enthält HISTIGNORE
das Muster [ ]*
), können Sie verhindern, dass Ihre Befehle im Bash-Verlauf gespeichert werden, indem Sie ihnen ein Leerzeichen voranstellen:
# This command won't be saved in the history
foo
# This command will be saved
bar
Suchen Sie im Befehlsverlauf nach Muster
Drücken Sie die Taste r und geben Sie ein Muster ein.
Zum Beispiel, wenn Sie vor kurzem ausgeführt man 5 crontab
, können Sie es schnell finden , indem Sie beginnen „crontab“ eingeben. Die Aufforderung ändert sich wie folgt:
(reverse-i-search)`cr': man 5 crontab
Das `cr'
dort ist der String, den ich bisher eingegeben habe. Dies ist eine inkrementelle Suche. Wenn Sie mit der Eingabe fortfahren, wird das Suchergebnis so aktualisiert, dass es dem neuesten Befehl entspricht, der das Muster enthielt.
Drücken Sie die linke oder rechte Pfeiltaste, um den übereinstimmenden Befehl zu bearbeiten, bevor Sie ihn ausführen, oder die Eingabetaste , um den Befehl auszuführen.
Standardmäßig findet die Suche den zuletzt ausgeführten Befehl, der dem Muster entspricht. Um weiter in die Historie zurückzukehren, drücken Sie erneut die Taste r . Sie können wiederholt drücken, bis Sie den gewünschten Befehl gefunden haben.
Wechseln Sie mit! #: N in ein neu erstelltes Verzeichnis
$ mkdir backup_download_directory && cd !#:1
mkdir backup_download_directory && cd backup_download_directory
Dadurch wird das N-te Argument des aktuellen Befehls ersetzt. Im Beispiel wird !#:1
durch das erste Argument ersetzt, dh backup_download_directory
Wiederholen Sie den vorherigen Befehl mit einer Ersetzung
$ mplayer Lecture_video_part1.mkv
$ ^1^2^
mplayer Lecture_video_part2.mkv
Dieser Befehl ersetzt 1
durch 2
im zuvor ausgeführten Befehl. Sie ersetzt nur das erste Vorkommen der Zeichenfolge und entspricht !!:s/1/2/
.
Wenn Sie alle Vorkommen ersetzen möchten, müssen Sie !!:gs/1/2/
oder !!:as/1/2/
.
Wiederholen Sie den vorherigen Befehl mit Sudo
$ apt-get install r-base
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
$ sudo !!
sudo apt-get install r-base
[sudo] password for <user>: