Czasami po uruchomieniu polecenia nie zauważam, że muszę go uruchomić jako superużytkownik, aby mieć wystarczające uprawnienia.
Czy istnieje sposób na ponowne uruchomienie tego samego polecenia, ale jako superużytkownik?
command-line
sudo
Trufa
źródło
źródło
!!
na własną rękę uruchamia poprzednie polecenie zgodnie z zapisanym whistory
. Ponadto wykonywanie!-1
,!-2
itd. Wykonuje ostatnie polecenie, drugie ostatnie polecenie i tak dalej. Poręczny!!<command>
wykona ostatnie wydarzenie od~/.bash_history
tego początku<command>
!
bashowa kopia, która została skopiowanatcsh
, spieprzyła mnie więcej razy niż kiedykolwiek była użyteczna. Podwójne cytaty nie chronią przed interpretacją!
.$ foo "!bar"
->!bar: event not found
.W pobliżu
odpowiedź : wchodzisz
sudo !!
bezpośrednio po nim, aby powtórzyć poprzednie polecenie ze zwiększonymi uprawnieniami.edytuj: Obraz znaleziony przez reddit , i jest to parodia oryginalnego komiksu xkcd autorstwa Randalla Munroe.
źródło
Możesz spróbować użyć klawisza strzałki w górę, aby przewijać stare polecenia, przepisywać / zmieniać je i dodawać
sudo
przed nimi. (przycisk Home nad klawiszami strzałek ustawi pozycję na początek.)Nie podoba mi się ten
sudo !!
pomysł, ponieważ czasami dodajesz kolejne polecenie i już nie pamiętasz.źródło
sudo !!
, powłoka rozszerzy się!!
, abyś mógł zobaczyć, jakie polecenie próbuje uruchomić. Więc może irytujące jest naciśnięcie Ctrl-C i znalezienie właściwego polecenia, ale przynajmniej nie zabierze cię to nieoczekiwanie.!!
sudo !!<TAB>
a!!
dla mnie autouzupełnianie . Bash może poszerzać historię za pomocąM-^
(dla mnie, Alt + Shift + 6), ale jest to mniej płynne (można to jednak ponownie powiązać). Istnieje równieżshopt -s histverify
funkcja, która sprawia, że gdy używasz rozszerzenia historii i naciskasz klawisz Enter, zamiast tego wyświetla ci się kolejny wiersz zachęty z wykonanym rozwinięciem, abyś mógł go zobaczyć / edytować.shopt -s histverify
nie pomoże ani trochę. Większość ludzi przyzwyczai się doEnter
dwukrotnego uderzenia . W tym momencie są jeszcze za późno, aby sprawdzić, co się stało.Dodam tylko alternatywę: tak krótkie jak pisanie
sudo !!
i bardziej elastyczne:Jest to dokładnie taka sama liczba naciśnięć klawiszy (liczę „ctrl + A” jako jeden ...), ale dodając „strzałkę w górę” możesz to zrobić na dowolnym poleceniu w twojej historii.
źródło
set -o vi
). Następnie możesz uciec (przejdź do trybu poleceń), a następnie „I” (wielkie „i”, wstaw na początku wiersza).Można to zrobić na kilka sposobów
Po prostu wprowadź polecenie ponownie, dodając
sudo
przed poleceniemNaciśnij, Up arrowaby uzyskać ostatnie polecenie i umieścić je
sudo
przed nim.Wchodzić
sudo !!
W
!!
rozszerza się do ostatniego polecenia wprowadzone. Możesz robić podobne rzeczy z innymi rzeczami dzięki historii wiersza poleceń, patrz tutajźródło
To pytanie można by uogólnić na „ Uruchom to samo polecenie, ale z pewną modyfikacją ”, ponieważ jedną z genialnych decyzji projektowych w Uniksie jest to, że to, co zaimplementowano raz w powłoce, może być wykorzystane przez dowolne polecenie wywoływane z powłoki.
Innymi słowy, ta sztuczka nie stosuje się tylko do
sudo
:sudo !!
)time !!
)env A=b B=z !!
)!!
)Rozszerzanie historii (znane również jako podstawianie historii) to po prostu funkcja powłoki, która ułatwia powtarzanie poprzednich poleceń (przy mniejszej liczbie naciśnięć klawiszy). Sprawdź swoją stronę podręcznika użytkownika powłoki pod kątem
history expansion
. Opisuje wiele innych sztuczek i skrótów, które możesz zrobić z historią, na przykład:Możesz odwoływać się do poprzednich poleceń według numeru:
W poprzednich poleceniach możesz odnosić się do poszczególnych słów:
Możesz także wyszukać przed powtórzeniem:
Możesz przeszukać historię i zastąpić coś innym:
I wiele więcej, ponieważ można łączyć wybór poleceń, wybór argumentów, wyszukiwanie i zastępowanie niezależnie.
Strona man twojej powłoki (w tym przypadku
man bash
) jest twoim przyjacielem.źródło
Używam zsh zamiast bash i mam to w mojej
~/.zshrc
, więc naciśnięcie Alt+ Swstawiasudo
na początku wiersza poleceń:Niestety nie udało mi się znaleźć sposobu na zrobienie tego samego w bashu.
źródło
~/.inputrc
"\es":"\C-asudo "
a przejdziesz na początek długiej linii, a sudo zostanie wstawione na początku linii po naciśnięciualt-s
. Zrestartuj terminal lub przeczytaj~/.inputrc
go ponownie, aby działał.Jeśli chcesz to zrobić w aliasie, musisz użyć
alias redo='sudo $(history -p !!)'
z jakiegoś powodu.źródło
Jeśli nie masz uprawnień do rootowania w sudo lub program sudo nie zainstalował się w systemie.
źródło
Tak jak wolę:
Ale może być łatwiej po prostu zrobić „sudo !!”, to zależy od ciebie.
źródło