繁体   English   中英

仅在sudo下执行shell脚本时找不到lzma命令

[英]lzma command not found when executing shell script only under sudo

我正在SUSE服务器中构建项目源代码。 项目build.sh调用“ lzma”命令来压缩内核。 项目build.sh需要使用“ sudo”才能访问某些系统命令。 但是我尝试执行“ sudo ./build.sh”,并且外壳程序始终报告错误:“ lzma:找不到命令”。

我可以使用用户帐户在Shell中执行“ lzma”。 工作正常。 我还编写了一个名为“ test.sh”的测试外壳脚本,该脚本调用了“ lzma”命令。 我发现如果使用“ sudo”执行“ test.sh”会失败,并显示相同的错误消息。 但是,如果我执行不带“ sudo”的“ test.sh”,它就可以正常工作。 为什么呢

sudo “未找到命令”几乎总是由诸如PATH,LD_LIBRARY_PATH(如果缺少的不是可执行文件而是所需的共享库)之类的环境变量更改而来的。

您可以通过以下方式通过环境变量传递工作值:

sudo PATH="$PATH" ./test.sh

Sudo使用与您的用户帐户不同的Path。

编辑(请参阅评论)

尝试执行:

type lzma

假设输出读取的内容类似于“ / usr / bin / lzma”,然后将其复制到您的sudo命令中,例如:

sudo /usr/bin/lzma

这应该够了吧。 如果要以root用户身份运行,还应该将lzma的完整路径写入您的shell脚本中。

编辑2:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM