Fishが何であるかわからない人のために: http://fishshell.com/
同様に、Goコーディング環境に精通しておらず、この小さなパズルを理解したい場合は、次の情報を参照してください。 http://golang.org/doc/code.html
とにかく、私はGo-lang開発者をセットアップしようとしています。 Fishを試してみる新しいマシンの環境。
したがって、bash
とfish
の両方で$GOPATH
を/home/<me>/workspace/go-workspace
に設定します。これは、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
を実行すると、設定した値が飛び出すので、これは絶対に間違っていることがわかります。
次に、奇妙なことに、同じ$GOPATH
セットを使用してbash
で同じコマンドを実行すると、正常に機能します。
誰か教えてもらえますか?
または、より一般的には、プログラムが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
すべてのシェル変数が環境変数であるとは限りません。 bash
では、子プロセスで環境変数になるために変数をexport
する必要があります(その変数がまだ環境変数でない場合)。つまり、FOO
がまだ定義されていないと仮定すると、FOO=bar
を実行するだけでは、子プロセスの環境で変数FOO
が表示されることはありません。 export FOO
でフォローアップする必要があります。または、export FOO=bar
を実行して一度にすべてを実行することもできます。
fish
でも同様のことが起こっていると思います。ここでは、GOPATH
を、環境にエクスポートされるシェル変数としてではなく、単にシェル変数として定義する必要があります。