我明白那个
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)