如何在 zsh 中使用 sudo 和別名?

如何在 zsh 中使用 sudo 和別名?

假設我的中有這兩個.zshrc

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

boot27給出boot27: command not found.如果我將別名更改為'nocorrect sudo '或 只是'sudo ',它就可以工作,但其他的東西,例如mkdirGive nocorrect: command not found

答案1

只是為了澄清一下,你運行sudo boot27並得到,boot27: command not found因為既然sudo是一個別名,bash 就會停止掃描別名並且不會將其識別boot27為別名。正如所討論的這裡,處理此問題的一種方法是在別名定義的末尾添加一個空格。

新增空格可以讓 bash 識別boot27,但現在的問題是您的 root 帳號未設定為使用 zsh,因此sudo需要啟動 bash shell。nocorrect是一個zsh東西,bash不知道它是什麼,所以它抱怨。

解決此問題的最簡單方法是將 root 的 shell 設定為/bin/zsh

sudo chsh

然後用空格設定別名:

alias sudo='nocorrect sudo '

不過你的boot27別名還有另一個問題。我假設您運行它sudo boot27,shell 將讀取別名並將其擴展為:

sudo grub-reboot 4 && reboot

因此,它將以 root 身份運行grub-reboot,但將以reboot普通用戶身份運行。您想要的是將別名更改為

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

並將其運行為sudo boot27,或將您的別名更改為

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

sudo並在沒有, just 的情況下運行它boot27

相關內容