我明白那个
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
跑步
which echo
Run Code Online (Sandbox Code Playgroud)
给出
/bin/echo
Run Code Online (Sandbox Code Playgroud)
echo
是一个普通的程序,并且sudo
可以“找到”它。
附带说明,必须有一些选项sudoers(5)