Sök…


Med! $

Du kan använda !$ att minska repetitionen när du använder kommandoraden:

$ echo ping
ping
$ echo !$
ping

Du kan också bygga vidare på upprepningen

$ echo !$ pong
ping pong
$ echo !$, a great game
pong, a great game

Lägg märke till att vi i det sista exemplet inte fick ping pong, a great game eftersom det sista argumentet som överfördes till det föregående kommandot var pong , vi kan undvika problem som detta genom att lägga till citat. Fortsatt med exemplet var vårt sista argument game :

$ echo "it is !$ time"
it is game time
$ echo "hooray, !$!"
hooray, it is game time!

Snabbreferens

Interaktion med historien

# List all previous commands
history

# Clear the history, useful if you entered a password by accident
history -c

Event designatorer

# 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
!#

Ordbeteckare

Dessa är separerade med : från händelse-designatorn de refererar till. Kolon kan utelämnas om ordbeteckningen inte börjar med ett nummer !^ Är samma som !:^ .

# 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 :^-$
!*

modifierare

Dessa modifierar föregående händelse eller ordbeteckning.

# 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

Om Bash-variabeln HISTCONTROL innehåller antingen ignorespace eller ignoreboth (eller alternativt HISTIGNORE innehåller mönstret [ ]* ) kan du förhindra att dina kommandon lagras i Bash-historiken genom att förbereda dem med ett mellanslag:

# This command won't be saved in the history
 foo

# This command will be saved
bar

Sök i kommandohistoriken efter mönster

Tryck på kontroll r och skriv ett mönster.

Om du till exempel nyligen man 5 crontab kan du hitta den snabbt genom att börja skriva "crontab". Frågan kommer att ändras så här:

(reverse-i-search)`cr': man 5 crontab

`cr' där är strängen som jag skrev hittills. Detta är en stegvis sökning, så när du fortsätter att skriva, uppdateras sökresultatet för att matcha det senaste kommandot som innehöll mönstret.

Tryck på vänster- eller högerpiltangenterna för att redigera det matchade kommandot innan du kör det, eller på Enter- tangenten för att köra kommandot.

Som standard hittar sökningen det senast genomförda kommandot som matchar mönstret. För att gå längre tillbaka i historien, tryck på kontroll r igen. Du kan trycka på den upprepade gånger tills du hittar önskat kommando.

Byt till nyligen skapad katalog med! #: N

$ mkdir backup_download_directory && cd !#:1
mkdir backup_download_directory && cd backup_download_directory

Detta kommer att ersätta Nth-argumentet för det aktuella kommandot. I exemplet !#:1 ersätts det första argumentet, dvs. backup_download_directory.

Upprepa föregående kommando med en ersättning

$ mplayer Lecture_video_part1.mkv
$ ^1^2^
mplayer Lecture_video_part2.mkv

Detta kommando kommer att ersätta 1 med 2 i det tidigare exekverade kommandot. Det kommer bara att ersätta den första förekomsten av strängen och motsvarar !!:s/1/2/ .

Om du vill ersätta alla händelser måste du använda !!:gs/1/2/ eller !!:as/1/2/ .

Upprepa föregående kommando med 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>: 


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow