Szukaj…


Korzystanie! $

Możesz użyć !$ Aby zmniejszyć liczbę powtórzeń podczas korzystania z wiersza poleceń:

$ echo ping
ping
$ echo !$
ping

Możesz również skorzystać z powtórzeń

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

Zauważ, że w ostatnim przykładzie nie otrzymaliśmy ping pong, a great game ponieważ ostatnim argumentem przekazanym do poprzedniego polecenia był pong , możemy uniknąć takiego problemu poprzez dodanie cudzysłowów. Kontynuując przykład, naszym ostatnim argumentem była game :

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

Krótki przegląd

Interakcja z historią

# List all previous commands
history

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

Oznaczniki zdarzeń

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

Oznaczniki słów

Są one oddzielone : od oznaczenia zdarzenia, do którego się odnoszą. Dwukropek można pominąć, jeśli desygnator słowa nie zaczyna się od liczby !^ Jest taki sam jak !:^ .

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

Modyfikatory

Modyfikują one poprzedzające oznaczenie zdarzenia lub słowa.

# 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

Jeśli zmienna HISTCONTROL zawiera albo ignorespace albo ignorespace ignoreboth (lub, alternatywnie, HISTIGNORE zawiera wzorzec [ ]* ), możesz uniemożliwić przechowywanie poleceń w historii Bash, przygotowując je spacją:

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

# This command will be saved
bar

Szukaj w historii poleceń według wzorca

Naciśnij klawisz kontrolny r i wpisz wzór.

Na przykład, jeśli niedawno wykonałeś man 5 crontab , możesz go szybko znaleźć, zaczynając pisać „crontab”. Monit zmieni się w następujący sposób:

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

`cr' to ciąg, który do tej pory wpisałem. Jest to wyszukiwanie przyrostowe, więc w miarę pisania dalej wynik wyszukiwania jest aktualizowany w celu dopasowania do najnowszego polecenia zawierającego wzorzec.

Naciśnij lewy lub prawy klawisz strzałki, aby edytować dopasowane polecenie przed jego uruchomieniem, lub klawisz Enter , aby uruchomić polecenie.

Domyślnie wyszukiwanie wyszukuje ostatnio wykonane polecenie pasujące do wzorca. Aby cofnąć się w historii, naciśnij ponownie przycisk sterowania r . Możesz naciskać go wielokrotnie, aż znajdziesz żądane polecenie.

Przejdź do nowo utworzonego katalogu za pomocą! #: N

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

To zastąpi N-ty argument bieżącego polecenia. W przykładzie !#:1 jest zastąpiony pierwszym argumentem, tj. Katalog_kopii_kopii_zapasowej.

Powtórz poprzednie polecenie z podstawieniem

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

To polecenie zastąpi 1 2 we wcześniej wykonanym poleceniu. Zastąpi tylko pierwsze wystąpienie łańcucha i jest równoważne z !!:s/1/2/ .

Jeśli chcesz zastąpić wszystkie wystąpienia, musisz użyć !!:gs/1/2/ lub !!:as/1/2/ .

Powtórz poprzednie polecenie za pomocą 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow