Wenn ich einen Befehl ausführe, merke ich manchmal nicht, dass ich ihn als Superuser ausführen musste, um über ausreichende Berechtigungen zu verfügen.
Gibt es eine Möglichkeit, denselben Befehl erneut auszuführen, aber als Superuser?
command-line
sudo
Trufa
quelle
quelle
!!
Ihres vorherigen Befehls wie in gespeichert aushistory
. Darüber hinaus tun!-1
,!-2
und so führt auf den letzten Befehl, vorletzter Befehl ein , und so weiter. Praktisch!!<command>
wird das letzte Event von~/.bash_history
diesem Anfang an mit<command>
!
Bash-Ding, von dem kopiert wurde,tcsh
hat mich öfter durcheinander gebracht, als es jemals nützlich gewesen ist. Doppelte Anführungszeichen schützen nicht vor der Interpretation von!
.$ foo "!bar"
->!bar: event not found
.Für den Fall, dass Sie nicht mehr weiterkommen möchten
Antwort : Sie geben
sudo !!
direkt danach ein, um den vorherigen Befehl mit erweiterten Berechtigungen zu wiederholen.edit: Bild gefunden via reddit , und es ist eine Parodie des originalen xkcd-Comics von Randall Munroe.
quelle
Sie können versuchen, mit der Aufwärtspfeiltaste durch Ihre alten Befehle zu scrollen und sie umzuschreiben / zu ändern und die
sudo
vor ihnen hinzuzufügen . (Die Home-Taste über den Pfeiltasten setzt die Position an den Anfang.)Ich mag die
sudo !!
Idee nicht, weil man manchmal einen anderen Befehl dazwischen hinzufügt und sich nicht mehr erinnert.quelle
sudo !!
die Shell dann erweitert,!!
sodass Sie sehen können, welcher Befehl ausgeführt werden soll. Daher kann es irritierend sein, Strg-C zu drücken und den richtigen Befehl zu finden, aber Sie werden zumindest nicht überrascht.!!
sudo !!<TAB>
und es wird automatisch!!
vervollständigt. Bash kann die Geschichte mitM-^
(für mich Alt + Shift + 6) erweitern, aber das ist weniger fließend (Sie könnten dies jedoch neu binden). Es gibt auchshopt -s histverify
eine Option, mit der Sie die Verlaufserweiterung anzeigen und bearbeiten können, wenn Sie die Eingabetaste drücken.shopt -s histverify
hilft kein bisschen. Die meisten Leute werden sich daran gewöhnen,Enter
zweimal zu schlagen . Zu diesem Zeitpunkt sind sie noch zu spät, um zu überprüfen, was passiert ist.Ich füge nur eine Alternative hinzu: So kurz wie das Tippen
sudo !!
und flexibler:Es ist genau die gleiche Anzahl von Tastenanschlägen (ich zähle "Strg + A" als einen ...), aber wenn Sie "Pfeil nach oben" hinzufügen, können Sie dies mit jedem Befehl in Ihrem Verlauf tun.
quelle
set -o vi
) verwenden. Dann können Sie Escape (in den Befehlsmodus wechseln) und dann 'I' (Großbuchstabe 'i', am Zeilenanfang einfügen).Hierfür gibt es verschiedene Möglichkeiten
Geben Sie einfach den Befehl erneut ein und fügen Sie ihn
sudo
vor dem Befehl hinzuDrücken Sie Up arrowden letzten Befehl zu bekommen und legte
sudo
vor ihm.Eingeben
sudo !!
Das wird
!!
zum zuletzt eingegebenen Befehl erweitert. Sie können ähnliche Dinge mit anderen Dingen in der Befehlszeilenhistorie tun, siehe hierquelle
Diese Frage hätte in "Den gleichen Befehl ausführen, aber mit einigen Änderungen " verallgemeinert werden können , da eine der brillanten Entwurfsentscheidungen in Unix darin besteht, dass das, was einmal in der Shell implementiert ist, von jedem Befehl genutzt werden kann, der von der Shell aus aufgerufen wird.
Mit anderen Worten, dieser Trick gilt nicht nur für
sudo
:sudo !!
)time !!
)env A=b B=z !!
)!!
)Die Verlaufserweiterung (auch als Verlaufsersetzung bezeichnet) ist nur eine Shell-Funktion, die das Wiederholen früherer Befehle erleichtert (mit weniger Tastenanschlägen). Überprüfen Sie Ihre Shell-Manpage auf
history expansion
. Es werden viele weitere Tricks und Verknüpfungen beschrieben, die Sie beispielsweise mit der Geschichte ausführen können:Sie können sich auf frühere Befehle durch Nummer beziehen:
Sie können in früheren Befehlen auf einzelne Wörter verweisen:
Sie können auch suchen, bevor Sie Folgendes wiederholen:
Sie können den Verlauf durchsuchen und etwas durch etwas anderes ersetzen:
Und vieles mehr, da Sie die Befehlsauswahl, die Argumentauswahl, das Suchen und Ersetzen unabhängig voneinander kombinieren können.
Die Manpage Ihrer Shell (in diesem Fall
man bash
) ist Ihr Freund.quelle
Ich verwende zsh anstelle von bash und habe dies in meinem
~/.zshrc
, also drücke Alt+ Sfügesudo
am Anfang der Kommandozeile ein:Leider konnte ich keine Möglichkeit finden, dasselbe in bash zu tun.
quelle
~/.inputrc
"\es":"\C-asudo "
und Sie werden an den Anfang einer langen Zeile verschoben, und sudo wird beim Drücken von am Anfang der Zeile eingefügtalt-s
. Starten Sie das Terminal neu oder lesen Sie~/.inputrc
es erneut, damit es funktioniert.Wenn Sie es in einem Alias tun möchten, müssen Sie
alias redo='sudo $(history -p !!)'
aus irgendeinem Grund verwenden.quelle
Wenn Sie keine Berechtigung haben, mit sudo als root angemeldet zu sein, wurde das sudo-Programm nicht auf dem System installiert.
quelle
So wie ich es mag:
Aber es könnte einfacher sein, einfach "sudo !!" zu machen, es liegt an Ihnen.
quelle