Bash
Podstawienia historii Bash
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>: