即使 echo 是内置函数的外壳,为什么“$ sudo echo 'yo'”仍然有效?

6 shell sudo echo

我明白那个

sudo cd /directory
Run Code Online (Sandbox Code Playgroud)

将返回:

sudo: cd: command not found
Run Code Online (Sandbox Code Playgroud)

因为 cd 是内置的 shell 而不是二进制文件。但是,为什么

sudo echo 'this is a test'
Run Code Online (Sandbox Code Playgroud)

工作正常?

这里到底发生了什么?如果不是shell,如何sudo找到命令echo

Bra*_*iam 18

原因很简单,cd是一个 shell 内建(和一些 shell 中的 shell 函数),而同时echo是一个二进制和一个 shell 内建:

$ type -a cd  
cd is a shell builtin
$ type -a echo 
echo is a shell builtin
echo is /bin/echo
Run Code Online (Sandbox Code Playgroud)

sudo无法处理 shell 内置函数,但可以处理$PATH. 当您使用sudo echo,/bin/echo在 中找到$PATH,所以它使用那个,同时在 中sudo cd找不到因此它失败。cd$PATH


Arc*_*mar 4

跑步

 which echo
Run Code Online (Sandbox Code Playgroud)

给出

 /bin/echo
Run Code Online (Sandbox Code Playgroud)

echo是一个普通的程序,并且sudo可以“找到”它。

附带说明,必须有一些选项sudoers(5)