Risposte:
Il modo più semplice è eseguire:
sudo !!
Questo eseguirà l'ultimo comando ma come superutente.
Fonte .
!!
da sola esegue il comando precedente come da salvato in history
. Inoltre, doing !-1
, !-2
e così via esegue l'ultimo comando, il secondo ultimo comando e così via. Maneggevole!
!<command>
eseguirà l'ultimo evento da ~/.bash_history
quell'inizio con<command>
!
cosa da bash copiata tcsh
mi ha rovinato più volte di quanto non sia mai stata utile. Le doppie virgolette non proteggono dall'interpretazione di !
. $ foo "!bar"
-> !bar: event not found
.
risposta : si immette sudo !!
subito dopo per ripetere il comando precedente con privilegi di escalation.
modifica: immagine trovata tramite reddit , ed è una parodia del fumetto originale xkcd di Randall Munroe.
Puoi provare il tasto freccia su per scorrere i tuoi vecchi comandi e riscriverli / cambiarli e aggiungere il sudo
davanti. (il pulsante home sopra i tasti freccia imposterà la posizione all'inizio).
Non mi piace l' sudo !!
idea, perché a volte aggiungi un altro comando in mezzo e non ricordi più.
sudo !!
, la shell si espanderà in !!
modo da poter vedere quale comando sta cercando di eseguire. Quindi, potrebbe essere irritante premere Ctrl-C e trovare il comando giusto, ma almeno non ti sorprenderà.
!!
sudo !!<TAB>
e si completa automaticamente !!
per me. Bash può espandere la storia con M-^
(per me, alt + maiusc + 6), ma è meno fluente (potresti ribaltarlo, però). C'è anche shopt -s histverify
, che lo rende in modo che quando usi l'espansione della cronologia e premi invio, ti dà invece un'altra riga di prompt con l'espansione eseguita per permetterti di vederlo / modificarlo.
shopt -s histverify
non aiuta un po '. La maggior parte delle persone si abituerà a colpire Enter
due volte. A quel punto sono ancora troppo tardi per controllare cosa è successo.
Aggiungerò solo un'alternativa: breve quanto la digitazione sudo !!
e più flessibile:
Up-arrow (once, or until you find the command you want to sudo/edit, if it's older)
ctrl+A (place cursor at beginning of line)
"sudo "
Enter
È esattamente lo stesso numero di sequenze di tasti (io conto "ctrl + A" come uno ...), ma aggiungendo "freccia su" puoi farlo su qualsiasi comando nella tua cronologia.
set -o vi
). Quindi puoi uscire (vai in modalità comando) e poi 'I' (maiuscolo 'i', inserisci all'inizio della riga).
Ci sono alcuni modi per farlo
Basta inserire nuovamente il comando aggiungendo sudo
prima del comando
Premere Up arrowper ottenere l'ultimo comando e metterlo sudo
di fronte.
accedere sudo !!
Si !!
espande all'ultimo comando inserito. Puoi fare cose simili con altre cose con la cronologia della riga di comando vedi qui
Questa domanda avrebbe potuto essere generalizzata in " Esegui lo stesso comando ma con qualche modifica ", poiché una delle brillanti decisioni di progettazione in Unix, è che ciò che è implementato una volta nella shell, può essere sfruttato da qualsiasi comando invocato dalla shell.
In altre parole, questo trucco non si applica solo a sudo
:
sudo !!
)time !!
)env A=b B=z !!
)!!
)L'espansione della cronologia (nota anche come sostituzione della cronologia) è solo una funzione della shell che semplifica la ripetizione dei comandi precedenti (con meno tasti). Controlla la pagina man della shell per history expansion
. Descrive molti altri trucchi e scorciatoie che puoi fare con la storia, ad esempio:
È possibile fare riferimento ai comandi precedenti in base al numero:
!55 # repeat command number 55
!-1 # repeat the previous command, alias for !!
!-2 # repeat the command before the previous command
È possibile fare riferimento a singole parole nei comandi precedenti:
some-command !$ # run some-command on the last arg of previous command
Puoi anche cercare prima di ripetere:
!?awk # repeat the last command including the string 'awk'
Puoi cercare nella cronologia e sostituire qualcosa con qualcos'altro:
!?awk?:s/str1/str2/ # repeat previous command matching 'awk' replacing str1 by str2
E molto altro, dal momento che è possibile combinare la selezione dei comandi, la selezione arg, la ricerca e la sostituzione in modo indipendente.
La pagina man della tua shell (in questo caso man bash
) è tua amica.
Uso zsh invece di bash e ho questo nel mio ~/.zshrc
, quindi premendo Alt+ Sinserisce sudo
all'inizio della riga di comando:
insert_sudo () { zle beginning-of-line; zle -U "sudo " }
zle -N insert-sudo insert_sudo
bindkey "^[s" insert-sudo
Sfortunatamente, non sono riuscito a trovare un modo per fare la stessa cosa a Bash.
Se vuoi farlo in un alias, devi usarlo alias redo='sudo $(history -p !!)'
per qualche motivo.
Il modo in cui lo preferisco:
Ma potrebbe essere più semplice fare semplicemente "sudo !!", dipende da te.