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/