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

Mik*_*oll 4 zsh oh-my-zsh

假设我的中有这两个.zshrc

alias sudo='nocorrect sudo'
alias boot27='grub-reboot 4 && reboot'
Run Code Online (Sandbox Code Playgroud)

boot27给出boot27: command not found. 如果我将别名更改为'nocorrect sudo '或 只是'sudo ',它就可以工作,但其他的东西,比如mkdirGive nocorrect: command not found

ter*_*don 6

只是为了澄清一下,你运行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
Run Code Online (Sandbox Code Playgroud)

然后用空格设置别名:

alias sudo='nocorrect sudo '
Run Code Online (Sandbox Code Playgroud)

不过你的boot27别名还有另一个问题。我假设您运行它sudo boot27,shell 将读取别名并将其扩展为:

sudo grub-reboot 4 && reboot
Run Code Online (Sandbox Code Playgroud)

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

alias boot27='grub-reboot 4 && sudo reboot'
Run Code Online (Sandbox Code Playgroud)

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

alias boot27='sudo grub-reboot 4 && sudo reboot'
Run Code Online (Sandbox Code Playgroud)

sudo并在没有, just 的情况下运行它boot27