Come reimmettere rapidamente un comando già dato aggiungendo sudo

Come reimmettere rapidamente un comando già dato aggiungendo sudo

Vi sarà capitato mille volte di dare un comando e ricevere dal sistema un errore perché avreste dovuto usare sudo e l'avete scordato.

In questi casi c'è un trucco utilissimo: la shell sostituisce !! con l'ultimo comando impartito. Quindi basta digitare:


$ sudo !!

per rieseguire l'ultimo comando con anteposto sudo.

Vediamo un esempio più completo:


$ cat /etc/shadow
cat: /etc/shadow: Permesso negato
$ sudo !!
sudo cat /etc/shadow
root:!:27965:0:89400:6:::
daemon:*:27965:0:89400:6:::
...

Ma la bash può fare anche molto altro, ad esempio può permettervi di reinviare il comando precedente sostituendone dei "pezzi", usando questa sintassi:


$ !!:s/dasostituire/sostituita/

Ecco un esempio più concreto:


$ cat coeds.txt
cat: coeds.txt: File o directory non esistente
$ !!:s/coeds/codes/
cat codes.txt

9UzZMJQL0q/coIlcbGsspRkaJsKDza4OqfXIjuKqqg=
ckfobD7PBVfR9eaa/GDm6IyGpIsDkPkdvoxN3qmUlw=
HA4fZrFnmqTfH8bSn8Vcq2frWdnocWMKnefeA529c=

In questo esempio abbiamo usato il comando cat su un nome file errato "coeds.txt" , quindi abbiamo usato !!:s per chiedere alla shell di rieseguire lo stesso comando dopo aver sostituito la stringa "coeds" con "codes". Di fatto il comando viene trasformato in cat codes.txt e stavolta può andare a buon fine perché il file esiste.

!!:s esegue il replace solo sulla prima occorrenza della stringa cercata, se invece volete sostituirne più di una dovete usare gs, ad esempio:


$ !!:gs/coeds/codes/

Currently there are no comments, so be the first!