Come faccio a usare sudo con alias in zsh?

Dire che ho questi due nel mio .zshrc :

 alias sudo='nocorrect sudo' alias boot27='grub-reboot 4 && reboot' 

boot27 fornisce boot27: command not found . Se cambiamo l'alias su 'nocorrect sudo ' o solo 'sudo ' , funziona, ma altre cose come mkdir danno nocorrect: command not found .

Per chiarire, eseguire sudo boot27 e get boot27: command not found perché poiché sudo è un alias, bash smette di eseguire la scansione degli alias e non riconosce boot27 come uno. Come discusso qui , un modo per affrontare questo problema è aggiungere uno spazio alla fine della definizione alias.

Aggiunta dello spazio consente a bash di riconoscere boot27 ma il problema ora è che il tuo account di root non è impostato per utilizzare zsh, quindi sudo inizia una shell bash. nocorrect è una cosa zsh , bash non ha idea di cosa sia così si lamenta.

Il modo più semplice per risolvere questo problema sarebbe quello di impostare la shell di root in /bin/zsh :

 sudo chsh 

Quindi impostare l'alias con lo spazio:

 alias sudo='nocorrect sudo ' 

L'alias boot27 ha un altro problema. Suppongo che lo fai come sudo boot27 , la shell leggerà l'alias e lo espanderà a:

 sudo grub-reboot 4 && reboot 

Così, eseguirà grub-reboot come root, ma verrà eseguito il reboot come un utente normale. Quello che volete è cambiare il tuo alias

 alias boot27='grub-reboot 4 && sudo reboot' 

e eseguirlo come sudo boot27 oppure per modificare l'alias

 alias boot27='sudo grub-reboot 4 && sudo reboot' 

e la boot27 funzionare senza sudo , appena boot27 .