为什么我的自定义命令不能通过 zsh 中的 sudo 工作?

Why my custom command wouldn't work over sudo in zsh?

我在我的 ~/.zshrc 中添加了以下自定义函数,但是当我使用 sudo 运行 时,我找不到命令。

woodo() {
    if [ $EUID != 0 ]; then
      echo "It's a weird tree."
    else
        echo '     _              __'
        echo '    / `\  (~._    ./  )'
        echo '    \__/ __`-_\__/ ./'
        echo '   _ \ \/  \   \ |_   __'
        echo ' (   )  \__/ -^    \ /  \'
        echo '  \_/ "  \  | o  o  |.. /  __'
        echo "       \. --' ====  /  || /  \ "
        echo '         \   .  .  |---__.\__/'
        echo '         /  :     /   |   |'
        echo '         /   :   /     \_/'
        echo '      --/ ::    ('
        echo '     (  |     (  (____'
        echo '   .--  .. ----**.____)'
        echo '   \___/          '
    fi
}

$ woodo
It's a weird tree.
$ sudo woodo
sudo: woodo: command not found

我也修改了它以检查 $UID,(按照建议 here),但它仍然不起作用:

...
if [[ $UID !=0 || $EUID != 0 ]]; then
...

它是 sudo woodo 以 root 而非普通用户身份运行 woodo。我不是 sudo 方面的专家,但我的猜测是它以 root 身份启动了一个新的 shell,可能是 bash 而不是 zsh。因此,您的个人 ~/.zshrc 不涉及。即使 sudo 确实使用 zsh,它也可能使用 /root/.zshrc.

进行初始化

不管怎样,你的个人 ~/.zshrc 没有在 sudo 下使用。