我正在SUSE服务器中构建项目源代码。 项目build.sh称为" lzma"压缩内核的命令。 项目build.sh需要" sudo"访问某些系统命令。 但我试图执行" sudo ./build.sh" ;,并且shell总是报告错误:" lzma:命令未找到。"
我可以执行" lzma"用我的用户帐户在shell中。它工作正常。 我还写了一个名为" test.sh"的测试shell脚本。哪个叫" lzma"命令。 如果我执行" test.sh"我发现它失败并显示相同的错误消息用" sudo" 。 但是如果我执行" test.sh"没有" sudo",它工作正常。 为什么?
答案 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"
。