如何在 zsh 中使用带有别名的 sudo?

如何在 zsh 中使用带有别名的 sudo?

假设我的中有这两个.zshrc

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

boot27给出boot27: command not found。如果我将别名更改为'nocorrect sudo '或只是'sudo ',它就可以工作,但是其他东西比如mkdir给出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

因此,它将grub-reboot以 root 身份运行,但也会reboot以普通用户身份运行。您需要将别名更改为

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

并将其作为 运行sudo boot27,或者将别名更改为

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

并且运行它,无需sudo,只需boot27

相关内容