对于那些不知道鱼是什么的人来说:http://fishshell.com/
同样,如果你不熟悉 Go 编码环境,但仍希望尝试解决这个小难题,这里有一些信息:http://golang.org/doc/code.html
无论如何,我正在尝试在一台新机器上建立一个 Go-lang 开发环境,在那里尝试 Fish。
因此,我在和中都$GOPATH
设置为。这意味着该工具需要在其下有一个、和目录。就在那里。/home/<me>/workspace/go-workspace
bash
fish
go
bin
pkg
src
但是,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
我知道这绝对是错误的,因为我可以运行echo $GOPATH
并且弹出我设置的值。
bash
然后,奇怪的是,如果我使用相同的设置运行相同的命令$GOPATH
,它就可以工作。
谁能告诉我为什么?
或者,更一般地,您能告诉我为什么一个程序能在一个 shell 中检测到环境变量,而在另一个 shell 中却不能吗?
答案1
您记得将$GOPATH
鱼标记为已出口吗?
set -x GOPATH /home/<me>/workspace/go-workspace
仅仅测试是不够的
echo $GOPATH
因为无论变量是否被导出,这都会起作用。使用
bash -c 'echo $GOPATH'
GOPATH
仅当已导出时才会打印其值。在 bash 中,可以像这样导出变量:
export GOPATH=/home/<me>/workspace/go-workspace
答案2
并非所有 shell 变量都是环境变量。在 中bash
,您必须将export
变量设置为子进程中的环境变量(如果该变量还不是环境变量)。也就是说,假设FOO
尚未定义,那么简单地执行FOO=bar
不会导致变量FOO
在子进程的环境中可见。您必须跟进export FOO
,或者您可以通过执行 一次性完成所有操作export FOO=bar
。
我假设在中发生了类似的事情fish
,您必须将其GOPATH
简单地定义为一个 shell 变量,而不是将其定义为也导出到环境中的 shell 变量。