2015-07-12 230 views
1

我在我的~/.zshrc中添加了以下自定义函数,但是当我使用sudo运行命令时,找不到命令。为什么我的自定义命令不能在zsh中使用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 
... 

回答

1

这是sudo woodo运行woodo为根,不是一般用户。我不是sudo的专家,但我的猜测是启动一个新的shell,可能bash而不是zsh,作为根。因此,您的个人~/.zshrc不涉及。即使sudo确实使用zsh,它也可能使用/root/.zshrc进行初始化。

无论哪种方式,您的个人~/.zshrc不使用sudo下。

+0

谢谢!我将它作为'/ usr/local/bin'中的一个文件添加并且现在可以运行。 – avi

+0

'sudo'需要一个可执行文件,它可以传递给'execve'作为运行命令。 Shell函数,别名和其他任意shell命令都被排除。 – chepner

相关问题