仅在sudo

时间:2017-02-16 11:11:44

标签: linux shell sudo

我正在SUSE服务器中构建项目源代码。 项目build.sh称为" lzma"压缩内核的命令。 项目build.sh需要" sudo"访问某些系统命令。 但我试图执行" sudo ./build.sh" ;,并且shell总是报告错误:" lzma:命令未找到。"

我可以执行" lzma"用我的用户帐户在shell中。它工作正常。 我还写了一个名为" test.sh"的测试shell脚本。哪个叫" lzma"命令。 如果我执行" test.sh"我发现它失败并显示相同的错误消息用" sudo" 。 但是如果我执行" test.sh"没有" sudo",它工作正常。 为什么?

2 个答案:

答案 0 :(得分:2)

"未找到命令" sudo内的sudo PATH="$PATH" ./test.sh 几乎总是环境变量的结果,如PATH,LD_LIBRARY_PATH(如果缺少的是可执行文件但它需要的共享库)或类似内容被更改。

您可以通过显式传递工作值:

viewDidLoad

答案 1 :(得分:1)

Sudo使用与您的用户帐户不同的路径。

编辑(见评论)

尝试并执行:

type lzma

假设输出读取类似'/ usr / bin / lzma'的内容,然后将该输出复制到sudo命令中,例如:(例如):

sudo /usr/bin/lzma

这应该可以解决问题。如果要以root身份运行它,还应该将lzma的完整路径写入shell脚本。

编辑2:

或者,正如Charles Duffy在他的回答中提到的那样,如果您尝试以SUDO或其他用户身份执行文件,则可以将所有内容保留为原样并在命令中使用PATH="$PATH"