为什么在 sudo 返回未找到命令时运行命令?

Cod*_*ium 16 sudo path

示例命令:

drush cc all
Run Code Online (Sandbox Code Playgroud)

有效,但这:

sudo drush cc all
Run Code Online (Sandbox Code Playgroud)

给我:

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

为什么?如何解决这个问题?

Tho*_*key 16

当你sudo,你会得到一个预先配置的$PATH,它(应该是)类似于root用户的默认路径。您的程序不在由 标识的目录列表中$PATH

见例如

sudo在执行外部命令时尽量保证安全。

有两种不同的方式来处理环境变量。默认情况下,env_reset sudoers 选项处于启用状态。这导致命令与一个含有最小的环境中执行TERMPATHHOMESHELLLOGNAMEUSERUSERNAME除了从调用过程变量允许通过env_checkenv_keep sudoers的选项。环境变量有一个有效的白名单。

如果您无法配置sudo以保留您的$PATH,通常的解决方法是指定程序的完整路径名。这可能不适用于在(未访问的)目录中调用其他可执行文件的脚本。