Bash
Vervangingen van Bash-geschiedenis
Zoeken…
Met behulp van! $
U kunt de !$
Gebruiken om herhaling te verminderen wanneer u de opdrachtregel gebruikt:
$ echo ping
ping
$ echo !$
ping
Je kunt ook voortbouwen op de herhaling
$ echo !$ pong
ping pong
$ echo !$, a great game
pong, a great game
Merk op dat we in het laatste voorbeeld geen ping pong, a great game
omdat het laatste argument dat aan het vorige commando werd doorgegeven pong
, we kunnen dit soort problemen voorkomen door aanhalingstekens toe te voegen. Verdergaand met het voorbeeld was ons laatste argument game
:
$ echo "it is !$ time"
it is game time
$ echo "hooray, !$!"
hooray, it is game time!
Snelle referentie
Interactie met de geschiedenis
# List all previous commands
history
# Clear the history, useful if you entered a password by accident
history -c
Aanwijzers voor evenementen
# 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
!#
Woordaanduidingen
Deze worden gescheiden door :
van de gebeurtenisaanduiding waarnaar ze verwijzen. De dubbele punt kan worden weggelaten als de woordaanduiding niet begint met een nummer !^
Is hetzelfde als !:^
.
# 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 :^-$
!*
modifiers
Deze wijzigen de voorafgaande gebeurtenis of woordaanduiding.
# 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
Als de Bash-variabele HISTCONTROL
ofwel ignorespace
ofwel ignorespace
ignoreboth
(of, als alternatief, HISTIGNORE
het patroon [ ]*
), kunt u voorkomen dat uw commando's worden opgeslagen in Bash-geschiedenis door ze te plaatsen met een spatie:
# This command won't be saved in the history
foo
# This command will be saved
bar
Zoek in de opdrachtgeschiedenis op patroon
Druk op bediening r en typ een patroon.
Als u bijvoorbeeld man 5 crontab
onlangs hebt uitgevoerd, kunt u dit snel vinden door "crontab" te typen . De prompt zal als volgt veranderen:
(reverse-i-search)`cr': man 5 crontab
De `cr'
daar is de string die ik tot nu toe heb getypt. Dit is een incrementele zoekopdracht, dus terwijl u doorgaat met typen, wordt het zoekresultaat bijgewerkt met de meest recente opdracht die het patroon bevatte.
Druk op de pijl naar links of rechts om de overeenkomende opdracht te bewerken voordat u deze uitvoert of op de Enter- toets om de opdracht uit te voeren.
De zoekopdracht vindt standaard de meest recent uitgevoerde opdracht die overeenkomt met het patroon. Als u verder terug wilt gaan in de geschiedenis, drukt u nogmaals op bediening r . U kunt herhaaldelijk drukken totdat u het gewenste commando vindt.
Schakel naar nieuwe map met! #: N
$ mkdir backup_download_directory && cd !#:1
mkdir backup_download_directory && cd backup_download_directory
Dit vervangt het Nde argument van de huidige opdracht. In het voorbeeld !#:1
wordt vervangen door het eerste argument, dat wil zeggen backup_download_directory.
Herhaal de vorige opdracht met een vervanging
$ mplayer Lecture_video_part1.mkv
$ ^1^2^
mplayer Lecture_video_part2.mkv
Deze opdracht vervangt 1
door 2
in de eerder uitgevoerde opdracht. Het vervangt alleen het eerste exemplaar van de tekenreeks en is gelijk aan !!:s/1/2/
.
Als u alle gebeurtenissen wilt vervangen, moet u !!:gs/1/2/
of !!:as/1/2/
.
Herhaal vorige opdracht met 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>: