我有一个在CentOS中从rc.local启动时运行的脚本.该脚本包含使用名为rebar的第三方构建命令编译我的erlang项目的命令. rebar线在启动时无法编译我的项目,但如果我然后手动运行它,项目编译就好了.我假设这是因为rebar命令调用没有绝对路径的其他命令.
原文链接:https://www.f2er.com/bash/385427.html如何在启动时运行命令,但是在不需要绝对路径的上下文中?
我不想要修补这个第三方命令(并处理那些不可避免的官僚主义者)和/或保留我自己的项目并行分支只是为了维护这个额外的功能.
我也很好奇为什么我不能谷歌这个.似乎它必须经常出现,以至于人们希望在rc.local中使用一个命令,该命令本身不使用所有绝对路径命令调用.此外,我觉得答案应该是微不足道的,因为我可以在启动后立即登录并以root身份运行我喜欢的任何命令,这也是rc.local运行的用户!是不是有一个钩子,你可以在“是的,我们真的现在一直启动的情况下运行脚本,让我们在系统上作为完全对等用户运行这个脚本,没有任何限制”?
这不是我第一次遇到这个问题,我很想知道发生了什么.
编辑:
(我不会等待8个小时来回答我自己的问题,所以…)
好吧,它看起来像设置PATH工作.我想我得到的印象是,即使在调用bash脚本之后,rc.local及其子节点中的命令也没有在PATH中搜索,但这是错误的. (@TiZon给了我一个很好的线索.)我得到这种印象的原因是因为每个Google结果都告诉提问者在命令调用中使用绝对路径,即使这对于除了琐碎的脚本或依赖于第三方命令的脚本之外的任何事情都很麻烦不遵循这条规则.相反,答案是使用正确的shebang行调用bash脚本,通过在常规会话期间回显它来找出正常环境的PATH是什么,然后将启动bash脚本中的PATH设置为常规.
希望这个答案能在谷歌上浮起来并帮助其他一些可怜的失落灵魂.