Bash脚本无法执行Go命令。

3

我尝试编写一个Bash脚本,以自动在不同的目录中运行go get / install。相关部分在这里:

( cd ../web ; go get )
( cd ../web ; go install )
( cd ../services ; go get )
( cd ../services ; go install )

当我执行脚本时,却得到了这个结果:
  • cd ../web
  • go get
    ./staging.sh: 第43行:go:命令未找到
  • cd ../web
  • go install
    ./staging.sh: 第44行:go:命令未找到
  • cd ../services
  • go get
    ./staging.sh: 第45行:go:命令未找到
  • cd ../services
  • go install
    ./staging.sh: 第46行:go:命令未找到
如果我手动进入目录并运行命令,它们可以正常工作。为什么从脚本中运行时它们没有被执行?

4
“go” 是否在 $PATH 路径中? - jedifans
听起来像是路径问题。尝试在你的脚本中添加 printenv | grep PATH 并确保 go 二进制文件在其中一个列出的文件夹中。如果你刚刚安装了 go,请尝试启动一个新的终端。 - pnovotnak
我得到的路径是:PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin,这与我进入文件时运行grep命令得到的路径不同。因此,这可能是一个路径问题。我该如何让脚本获取正确的路径? - Graham
当您在交互式 shell 和脚本中运行 echo $SHELL 命令时,是否会产生相同的结果?这可能是因为您正在加载不同的 shell,并且该 shell 没有加载 .*rc 文件,其中您的 $PATH 被正确设置。 - pnovotnak
是的,都可以使用print bin/bash。 - Graham
1个回答

6
我猜测您是按照go安装页面上的安装说明进行操作,并向您说明添加一些内容到您的~/.profile文件中。这个文件不会在非交互式会话(例如:您的脚本)中加载。因此,您需要将它添加到您的shell的rcfile中,或在您的脚本中通过完整路径引用go二进制文件。
您可以通过在shell中运行以下命令来查找go的完整路径:
$ which go
/path/to/go

然后,在您的脚本中:
GO=/path/to/go
$GO command

或者,在脚本内部扩展您的 PATH

PATH=$PATH:/path/to

我已经尝试了这两种方法。现在它能够识别命令,但是它不会下载任何第三方库,因为GOPATH没有设置。我尝试在脚本中以与“~/.profile”中相同的方式设置GOPATH,但似乎不起作用。 - Graham
再试一次打印 printenv 命令,但这次不要使用 grep。 - jedifans
终于搞定了。在将路径放入etc/bash.bashrc后,直到我添加以下内容才能从那里进行源操作: #!/bin/bash chmod a+x /etc/bash.bashrc PS1='$ ' source /etc/bash.bashrc - Graham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接