我有一个用Go编写并在Heroku上部署的Web应用程序。最近,我实现了一个需要运行bash脚本文件并检索其输出的新功能。我使用的命令是:
out, err := exec.Command("bash", script_path, arg).Output()
其中script_path是脚本的绝对路径。 (它是使用调用者文件路径动态构建的)而arg是脚本的输入。
此命令在我的本地计算机中正常工作,但在Heroku中不能正常工作:
18:51:40 http:恐慌服务10.238.8.204:17763:退出状态127
ps:如果我在" heroku运行bash "上运行相同的命令,它就可以运行。
有什么想法吗?
答案 0 :(得分:1)
shell返回代码127
用于指定"命令未找到"。
您可以通过这个小例子看到这种行为。
$ nonesuch
-bash: nonesuch: command not found
$ echo $?
127
此类问题通常意味着您需要添加
/full/path/to/myscriptdir
到PATH
env var。即。
export PATH="$PATH:/full/path/to/myscriptdir withSpaces"
有几个地方可以实现,但这取决于你的组织规则。
要立即解决问题,请添加到运行Heroku的userID的$HOME/.profile
文件中,或者可能会添加一个Heroku特定的配置文件。 (我没有Heroku的经验)。
有趣的是,这篇文章Heroku config files没有提到PATH变量。
正如您所发现的,您可以编辑代码以直接包含完整路径,即
out, err := exec.Command("/bin/bash", path.Join(".", "src", "ext", "dextenso.sh"),
IHTH