Ich möchte in der Lage sein, einen Befehl auszuführen, der fehlschlägt, weil er nicht über die richtigen Berechtigungen verfügt. Dann kann ich "bitte" schreiben, um den Befehl auszuführen, den ich gerade ausgeführt habe.
Folgendes möchte ich im Terminal tun:
$ run command
"you don't have access to do that"
$ please
"ran successfully"
Ich habe gesehen, dass !!
der vorherige Befehl abgerufen wird, also dachte ich, ich könnte das verwenden, aber ich kann es nicht zum Laufen bringen.
Mein bitte.sh-Shell-Skript sieht so aus, aber ich kann keines davon zum Laufen bringen. Es heißt nur "Befehl nicht gefunden !!" und druckt die Sudo-Verwendung aus.
#!/bin/zsh
#sudo !!
#sudo `!!`
sudo $(!!)
command-line
zsh
jb.
quelle
quelle
sudo !!
läuft es wie erwartet? Ich glaube !! kann nur ein Bash-Alias sein, so dass es in zsh nicht funktionieren kann!!
und andere) funktioniert nur in interaktiven Shells und nicht in Skripten.sudo !!
im interaktiven Modus funktioniert fast wie erwartet. Wenn ich die Eingabetaste drückte, wurde es durch!!
den vorherigen Befehl ersetzt. dann musste ich erneut die Eingabetaste drücken, um es auszuführen.Antworten:
Sie können nicht
!!
in einem Shell-Skript verwenden, da Sie in einer untergeordneten Shell nicht auf die übergeordnete Shell zugreifen können. Obwohl ich die Verwendung empfehlesudo !!
, müssten Sie, wenn Sie wirklich ein BASH-Skript erstellen möchten, .bash_history wie folgt verwenden:Es ist definitiv keine perfekte Lösung, aber es sollte den Trick machen.
Wenn Sie ZSH verwenden, funktioniert dies nicht, da ZSH (meines Wissens) nicht in .bash_history ausgibt.UPDATE : Hier ist eine Version, die mit ZSH funktionieren sollte:Hoffe das hilft!
Wenn Sie das Skript nicht verstehen, führt es einfach den zuletzt in BASH mit sudo eingegebenen Befehl aus.
quelle
fc
oderhistory
eingebauten. Standardmäßig wird $ HISTFILE erst aktualisiert, wenn Sie sich von bash abmelden.Fügen Sie Ihrer .zshrc hinzu:
quelle
fc
steht für fix befehl. Die Dokumentation finden Sie hier .alias lastcmd="fc -ln -1 | pbcopy"
Ich glaube, dies sollte (?) Unter Ubuntu funktionieren :alias lastcmd="fc -ln -1 | xclip -selection clipboard
.