Variável global não carregada automaticamente de .profile

1

Para configurar o CUDA 9.1, eu li que é conveniente adicionar sua pasta de instalação para PATH e LD_LIBRARY_PATH , como:

PATH="/usr/local/cuda-9.1/bin:$PATH"
LD_LIBRARY_PATH="/usr/local/cuda-9.1/lib64:$LD_LIBRARY_PATH"

Seguindo este e this SE answers Eu tentei editar o meu arquivo .profile adicionando as últimas linhas como abaixo. / p>

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin directories
PATH="$HOME/bin:$HOME/.local/bin:$PATH"

# settings for CUDA
PATH="/usr/local/cuda-9.1/bin:$PATH"
LD_LIBRARY_PATH="/usr/local/cuda-9.1/lib64:$LD_LIBRARY_PATH"

Com .profile como acima, posso abrir um terminal e executar echo $PATH para ver as instruções funcionando, pois PATH agora contém a pasta que indiquei. No entanto, por algum motivo, isso não funciona para LD_LIBRARY_PATH .

Eu adivinhei que o problema poderia ter sido que LD_LIBRARY_PATH não existia antes, então eu tentei modificar .profile com o código ligeiramente diferente abaixo nas últimas 2 linhas.

PATH="/usr/local/cuda-9.1/bin:$PATH"
export LD_LIBRARY_PATH=/usr/local/cuda-9.1/lib64

Mais uma vez, no entanto, sem sucesso.

Ao perceber o primeiro aviso no início de .profile , verifiquei se eu tinha arquivos ~/.bash_profile ou ~/.bash_login . Eles não existem e, de qualquer forma, não explicariam como meu PATH é atualizado com êxito.

Fazendo algumas pesquisas, me deparei com este outro resposta, que explica que .profile não é necessariamente executado quando eu abro um terminal. No entanto, novamente, como posso explicar que PATH está atualizado?

Qual poderia ser o problema? Há algo de errado com a minha sintaxe?

EDITAR:

Eu tentei sair e ligar depois que mudei o .profile para conter

PATH="/usr/local/cuda-9.1/bin:$PATH"
export LD_LIBRARY_PATH=/usr/local/cuda-9.1/lib64

e agora funciona. Se eu entrar em um terminal e digitar echo $LD_LIBRARY_PATH eu finalmente o vejo. Eu ainda não entendi porque a primeira versão da minha lista de instruções não funcionou ...

    
por raggot 19.02.2018 / 21:03

2 respostas

2

O motivo pelo qual PATH funciona sem export é que ele é definido como uma variável de ambiente antes que ~/.profile seja executado. Para alterar uma variável de ambiente existente,

VAR=foo

é suficiente.

Para adicionar uma variável ao ambiente, você precisa fazer

export NEWVAR=bar

Por favor, veja EnvironmentVariables para ler mais sobre o assunto.

    
por Gunnar Hjalmarsson 20.02.2018 / 15:54
0

Eu acho que sua solução é autoexplicativa, a palavra-chave export fez o truque e é obrigada a "exportar" variáveis ambientais para uso. Você pode exportar variáveis do shell usando o comando de exportação.

Para ver a lista de variáveis exportadas, execute export -p

Veja man bash :

export [-fn] [name[=word]] ...
export -p
           The  supplied  names are marked for automatic export to the environment of subsequently executed commands.  If the -f option is given, the names
           refer to functions.  If no names are given, or if the -p option is supplied, a list of names of all  exported  variables  is  printed.   The  -n
           option  causes  the  export property to be removed from each name.  If a variable name is followed by =word, the value of the variable is set to
           word.  export returns an exit status of 0 unless an invalid option is encountered, one of the names is not a valid shell variable name, or -f is
           supplied with a name that is not a function.
    
por George Udosen 19.02.2018 / 21:13