Go-lang go 工具适用于 Bash 但不适用于 Fish

Log*_*gan 5 linux bash environment-variables fish

对于那些不知道 Fish 是什么的人:http : //fishshell.com/

同样,如果您不熟悉 Go 编码环境,但仍想尝试解决这个小难题,这里有一些信息:http : //golang.org/doc/code.html

无论如何,所以我正在尝试建立一个 Go-lang 开发人员。我正在尝试使用 Fish 的新机器上的环境。

所以我$GOPATH设置为/home/<me>/workspace/go-workspace在这两个bashfish。这意味着该go工具需要一个binpkgsrc最底下目录。哪个在那里。

但是,go get在带有一些代码(通常会下载它的依赖项)的目录中输入时会产生

package code.google.com/p/go.crypto/openpgp: cannot download, $GOPATH not set. For more details see: go help gopath
package code.google.com/p/go.crypto/openpgp/armor: cannot download, $GOPATH not set. For more details see: go help gopath
package code.google.com/p/go.crypto/ssh: cannot download, $GOPATH not set. For more details see: go help gopath
package github.com/codegangsta/cli: cannot download, $GOPATH not set. For more details see: go help gopath
package github.com/oleiade/reflections: cannot download, $GOPATH not set. For more details see: go help gopath
package launchpad.net/goamz/aws: cannot download, $GOPATH not set. For more details see: go help gopath
package launchpad.net/goamz/s3: cannot download, $GOPATH not set. For more details see: go help gopath
Run Code Online (Sandbox Code Playgroud)

我知道这绝对是错误的,因为我可以运行echo $GOPATH并弹出我设置的值。

然后,奇怪的是,如果我bash使用相同的$GOPATH集合运行相同的命令,它就可以工作。

谁能告诉我为什么?

或者,更一般地说,您能告诉我为什么程序会在一个 shell 中检测到环境变量而不是另一个吗?

ric*_*ici 10

你记得把$GOPATH鱼标记为出口吗?

set -x GOPATH /home/<me>/workspace/go-workspace
Run Code Online (Sandbox Code Playgroud)

用它测试是不够的

echo $GOPATH
Run Code Online (Sandbox Code Playgroud)

因为无论是否导出变量,这都将起作用。检查

bash -c 'echo $GOPATH'
Run Code Online (Sandbox Code Playgroud)

GOPATH如果它已被导出,它只会打印值。在 bash 中,您可以像这样导出变量:

export GOPATH=/home/<me>/workspace/go-workspace
Run Code Online (Sandbox Code Playgroud)