Faça um programa ignorar “.bashrc”

2

Desculpe se é uma questão noob extremamente estúpida, mas eu não sou um especialista e não consigo encontrar nenhuma resposta adequada neste ou em outros fóruns.

Estou executando o Ubuntu 18.04 x64 e estou trabalhando com os Compiladores Intel. Para manter meu sistema e a compilação do meu software consistentes, configurei meu .bashrc para definir os compiladores da Intel como padrão.

source /opt/intel/parallel_studio_xe_2018.2.046/bin/psxevars.sh
export CC='/opt/intel/bin/icc'
export CXX='/opt/intel/bin/icpc'
export FC='/opt/intel/bin/ifort'
export F77='/opt/intel/bin/ifort'
export CFLAGS='-O3 -xHost -ip'
export CXXFLAGS='-O3 -xHost -ip'
export FCFLAGS='-O3 -xHost -ip'

Agora, se eu fizer isso, não consigo iniciar o MATLAB R2017b. Toda vez que eu inicio isso, ele colide com os compiladores da Intel e anula a inicialização com o erro:

symbol lookup error: /opt/intel/compilers_and_libraries_2018.2.199/linux/compiler/lib/intel64/libirng.so: undefined symbol: __intel_skx_avx512_memcpy

A única maneira de fazer com que o MATLAB funcione é comentar as variáveis acima no meu arquivo .bashrc, fonte-lo e iniciar o MATLAB.

Isso, é claro, louco e eu queria saber se era possível ter, por exemplo, arquivos .desktop que ignoram .bashrc ou se há outra maneira de ter essas variáveis ambientais funcionando, mas ter um software ignorando eles.

Obrigado!

    
por Mutewinter 01.06.2018 / 12:34

2 respostas

4

É possível iniciar bash ignorando o arquivo ~/.bashrc . Especificamente, via --no-rc flag:

 bash --noprofile --norc

Você pode criar um arquivo .desktop do wrapper para isso de uma maneira bem simples:

[Desktop Entry]
Version=1.0
Name=No-rc shell
Comment=Starts Bash with --no-rc flag
Exec=bash --noprofile --norc
Icon=/usr/share/icons/gnome/48x48/apps/terminal.png
Terminal=true
Type=Application
Categories=Utility;Development;

Como alternativa, você poderia modificar o ~/.bashrc de tal forma, que permitiria a sua origem dinamicamente. Por exemplo, eu pessoalmente faria algo assim:

if [ -z "$no_intell_compilers" ][ "$no_intell_compilers" = "false" ]; then
    source /opt/intel/parallel_studio_xe_2018.2.046/bin/psxevars.sh
    export CC='/opt/intel/bin/icc'
    export CXX='/opt/intel/bin/icpc'
    export FC='/opt/intel/bin/ifort'
    export F77='/opt/intel/bin/ifort'
    export CFLAGS='-O3 -xHost -ip'
    export CXXFLAGS='-O3 -xHost -ip'
    export FCFLAGS='-O3 -xHost -ip'
fi

O que isto faz é verificar a variável de ambiente no_intell_compilers ; se não estiver definido ou definido como false , ~/.bashrc exportará essas variáveis. Quando você quiser começar de novo sem essas variáveis no ambiente, faça

$ no_intell_compilers="true"
$ source ~/.bashrc

Quando terminar de desenvolver o shell, apenas unset no_intell_compilers e fonte do arquivo novamente para ter as variáveis de volta.

    
por Sergiy Kolodyazhnyy 01.06.2018 / 20:58
3

Isso não responde exatamente à sua pergunta sobre ignorar .bashrc , mas imaginei que essa poderia ser uma alternativa razoável:

Remova as declarações necessárias para o desenvolvimento de seu ~/.bashrc e coloque-as em um arquivo separado, por exemplo, ~/dev-env :

#
# Set environment for icc compiler
#
source /opt/intel/parallel_studio_xe_2018.2.046/bin/psxevars.sh
export CC='/opt/intel/bin/icc'
export CXX='/opt/intel/bin/icpc'
export FC='/opt/intel/bin/ifort'
export F77='/opt/intel/bin/ifort'
export CFLAGS='-O3 -xHost -ip'
export CXXFLAGS='-O3 -xHost -ip'
export FCFLAGS='-O3 -xHost -ip'

Então, quando você quiser desenvolver algo com o compilador icc , simplesmente forneça esse arquivo manualmente na (s) janela (s) do terminal afetada:

source ~/dev-env

O arquivo não precisa ser executável porque você não executará , mas source . Isso significa que as instruções nele são processadas pelo shell atual e, portanto, afetam o shell atual. Se você pudesse torná-lo executável e, em seguida, executá-lo, um subshell seria gerado, as configurações foram definidas lá e, em seguida, o subshell seria fechado. Não é o que você quer.

    
por PerlDuck 01.06.2018 / 18:43