A ferramenta Go-lang go funciona com Bash mas não com Fish

5

Para aqueles que não têm ideia do que é o Fish: link

Da mesma forma, se você não estiver familiarizado com um ambiente de codificação Go e ainda quiser tentar descobrir esse pequeno quebra-cabeça, aqui estão algumas informações: link

De qualquer forma, estou tentando configurar um desenvolvedor Go-lang. ambiente em uma nova máquina onde eu estou dando Fish uma tentativa.

Portanto, eu tenho $GOPATH definido como /home/<me>/workspace/go-workspace em bash e fish . Isso significa que a ferramenta go espera um diretório bin , pkg e src abaixo disso. Que está lá.

No entanto, digitar go get enquanto estiver em um diretório com algum código (o que normalmente faria o download de suas dependências) rende

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

Eu sei que isso é absolutamente falso porque posso executar echo $GOPATH e o valor que defini.

Então, estranhamente, se eu executar o mesmo comando em bash com o mesmo $GOPATH set, ele simplesmente funciona.

Alguém pode me dizer por quê?

Ou, mais genericamente, você pode me dizer por que um programa detectaria uma variável de ambiente em um shell, mas não em outro?

    
por Logan 22.11.2013 / 05:35

2 respostas

10

Você se lembrou de marcar $GOPATH em peixes como exportados?

set -x GOPATH /home/<me>/workspace/go-workspace

Não é suficiente testar com

echo $GOPATH

desde que funcionará, independentemente de a variável ser exportada. Verifique com

bash -c 'echo $GOPATH'

que só imprimirá o valor de GOPATH se tiver sido exportado. No bash, você exporta variáveis como esta:

export GOPATH=/home/<me>/workspace/go-workspace
    
por 22.11.2013 / 06:04
1

Nem todas as variáveis do shell são variáveis de ambiente. Em bash , você teria que export uma variável para se tornar uma variável de ambiente em processos filhos (se essa variável já não fosse uma variável de ambiente). Ou seja, assumindo que FOO ainda não está definido, simplesmente executar FOO=bar não faria com que a variável FOO fosse visível no ambiente de um processo filho. Você teria que seguir com export FOO , ou você poderia fazer tudo de uma vez fazendo export FOO=bar .

Eu diria que algo semelhante está acontecendo em fish , onde você deve ter GOPATH definido simplesmente como uma variável shell, e não como uma variável shell também exportada para o ambiente.

    
por 22.11.2013 / 06:03