Quando eu faço um caminho de exportação usando terminal, para qual arquivo ele salva? [duplicado]

2

Por exemplo, quando executo exportar export PATH=$PATH:$GOROOT/bin:$GOPATH/bin ou GOPATH=~/workspace/me/go para qual arquivo isso é adicionado?

    
por Kaigo 13.04.2018 / 19:05

2 respostas

2

Quando você usa export de uma variável, ela não é adicionada a nenhum arquivo em lugar algum .

O efeito de export , em oposição a meramente atribuir uma variável, é o de passar a variável para o ambiente de todos os processos filhos do shell. Não faz mais nada; ele não modifica nenhum dos arquivos de configuração do shell. Após o shell e todos os seus processos filhos terem saído, a variável exportada desaparece! Quando você abre um novo shell que não é filho do primeiro shell, esse shell não se lembra de sua variável.

Na verdade, não há necessidade de export PATH porque PATH já é uma variável de ambiente. Já é exportado; ele será passado automaticamente para o ambiente de processos filhos e, quando você o alterar, os processos filhos herdarão a mudança também.

Você pode ver isso usando printenv , um comando para imprimir variáveis de ambiente:

$ foo=bar; echo $foo             # set a variable   
bar                              # the shell knows it
$ printenv foo                   # but it's not in the environment...
$ export foo; printenv foo       # export the variable and check again
bar                              # there it is!
$ foo=new; printenv foo          # change the variable
new                              # the change is inherited
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ PATH=/usr/bin; printenv PATH   # printenv is in /usr/bin so keep that!
/usr/bin                         # the change was inherited

(Agora eu preciso sair desse shell para recuperar meu PATH, ou source /etc/environment , porque qualquer novo shell que eu iniciar a partir desse shell herdará aquela variável PATH que eu errei ...)

Se você quiser definir qualquer variável persistentemente, você mesmo precisará adicioná-la a um dos arquivos de configuração do shell.

PATH é a única variável, até onde eu sei, que é por padrão definida em /etc/environment no Ubuntu. Eu recomendo que não edite /etc/environment para definir o PATH, ou se fizer isso, tenha cuidado para fazer um backup do arquivo original, porque você não terá outra maneira de recuperar o PATH original (a menos que você escreveu em algum lugar ou tem uma memória incrível). Lembre-se também de que nenhuma expansão será executada no conteúdo, portanto, você deve usar caminhos completos, não $PATH ou $GOPATH ou ~ . Se você escrever tais coisas, elas estarão literalmente no PATH, e se o seu PATH for literalmente $PATH:~/workspace/me/go , você não poderá executar nenhum comando (exceto aqueles embutidos no shell) sem usar seus caminhos completos.

Eu também não recomendo configurar o PATH em .bashrc , porque todo shell Bash interativo lê .bashrc , e é bastante comum iniciar um novo shell a partir de um shell, e assim por diante ... Se você colocar algo como

PATH="$PATH:$HOME/foo"

no seu .bashrc , você descobrirá que /home/user/foo é anexado ao seu PATH várias vezes; cada vez que um shell inicia um shell, o PATH é estendido novamente. Isso pode, eventualmente, tornar as coisas mais lentas, especialmente se você adicionar muitos caminhos. Além disso, somente shells interativos do Bash leem ~/.bashrc , portanto, se você usar um shell diferente do Bash, ou executar um script, sem que seja um processo filho de um shell Bash interativo, ele não terá essa variável.

Em vez disso, recomendo adicionar uma linha a ~/.profile para estender seu PATH. Este arquivo é lido apenas por shells de login; normalmente, ele é lido apenas uma vez quando você efetua login em sua sessão, portanto, o PATH só será anexado a uma vez, e todos os shells herdarão variáveis de ambiente definidas lá, não apenas shells interativos de Bash. É comum adicionar variáveis de ambiente a este arquivo. Então, você pode abrir ~/.profile em um editor de texto e adicionar linhas dizendo algo como:

GOPATH="$HOME/workspace/me/go"
PATH="$PATH:$GOPATH/bin"

É uma boa ideia citar o caminho como mostrado, no caso de qualquer um dos diretórios incluir caracteres especiais (também é uma boa idéia criar diretórios que não possuam caracteres especiais em seus nomes, mas as coisas acontecem), e se você citá-lo, não poderá usar ~ como um atalho para /home/user porque as aspas duplas ( " ) suprimem a expansão de til, mas você pode usar $HOME porque a expansão de parâmetro ainda é executada e $HOME vai se tornar /home/user .

Após a edição, salve o arquivo e saia, saia e volte, ou execute source ~/.profile , e seu PATH sempre incluirá /home/user/workspace/me/go .

    
por Zanna 13.04.2018 / 23:49
0

Custiomizations da shell são normalmente editados em $HOME/.bashrc , que é sourced em cada shell que você inicia. Leia man bash .

BTW, você deve ter a definição GOPATH

 GOPATH=~/workspace/me/go  

Antes de usar GOPATH

export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

Além disso, onde está a definição de GOROOT ?

    
por waltinator 13.04.2018 / 19:19