Como quebrar uma linha longa em .bash_profile

0

Eu tenho uma linha muito longa no meu .bash_profile, conforme abaixo:

export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/cuda/lib:$HOME/anaconda2/lib:/usr/local/lib:/usr/lib:/opt/intel/compilers_and_libraries/mac/lib:/opt/intel/mkl/lib:$DYLD_FALLBACK_LIBRARY_PATH

Como faço para quebrar essa linha em várias linhas?

Além disso, o .bash_profile é considerado um script de shell? Se não, o que exatamente é categorizado como? Se eu souber disso, poderei consultar o guia geral de formatação deste arquivo.

    
por Ben 25.07.2018 / 21:16

3 respostas

2

DYLD_FALLBACK_LIBRARY_PATH="/opt/intel/mkl/lib:$DYLD_FALLBACK_LIBRARY_PATH"
DYLD_FALLBACK_LIBRARY_PATH="/opt/intel/compilers_and_libraries/mac/lib:$DYLD_FALLBACK_LIBRARY_PATH"
DYLD_FALLBACK_LIBRARY_PATH="/usr/local/lib:/usr/lib:$DYLD_FALLBACK_LIBRARY_PATH"
DYLD_FALLBACK_LIBRARY_PATH="/usr/local/cuda/lib:$HOME/anaconda2/lib:$DYLD_FALLBACK_LIBRARY_PATH"
export DYLD_FALLBACK_LIBRARY_PATH

Ou com uma concatenação de matriz e string:

paths=(
    /usr/local/cuda/lib
    "$HOME/anaconda2/lib"
    /usr/local/lib
    /usr/lib
    /opt/intel/compilers_and_libraries/mac/lib
    /opt/intel/mkl/lib
    ${DYLD_FALLBACK_LIBRARY_PATH:+"$DYLD_FALLBACK_LIBRARY_PATH"}
)

oldIFS="$IFS"; IFS=:
export DYLD_FALLBACK_LIBRARY_PATH="${paths[*]}"
IFS="$oldIFS"; unset oldIFS

Esse último item da matriz será expandido para o valor da variável DYLD_FALLBACK_LIBRARY_PATH ou para nada se não estiver definido ou estiver vazio.

A expansão de "${paths[*]}" será os caminhos unidos em uma única string delimitada pelo primeiro caractere da variável IFS .

    
por 25.07.2018 / 22:39
1

Você pode fazer isso usando o caractere de quebra de linha: \ . Além disso, você deve declarar e exportar em duas linhas diferentes:

DYLD_FALLBACK_LIBRARY_PATH=/usr/local/cuda/lib:\
$HOME/anaconda2/lib:\
/usr/local/lib:/usr/lib:\
/opt/intel/compilers_and_libraries/mac/lib:\
/opt/intel/mkl/lib:\
$DYLD_FALLBACK_LIBRARY_PATH
export DYLD_FALLBACK_LIBRARY_PATH

Seu perfil bash é um arquivo de configuração e um script de tipos.

    
por 25.07.2018 / 21:22
0

Como é o Bash, você pode acrescentar uma string ( var+=value ). Embora você precise de uma variável temporária aqui, já que você está prefixando os caminhos para o valor original.

tmp=/usr/local/cuda/lib
tmp+=:$HOME/anaconda2/lib
tmp+=:/usr/local/lib
tmp+=:/usr/lib
tmp+=:/opt/intel/compilers_and_libraries/mac/lib
tmp+=:/opt/intel/mkl/lib
export DYLD_FALLBACK_LIBRARY_PATH=$tmp:$DYLD_FALLBACK_LIBRARY_PATH
unset tmp

Observe que, assim como seu snippet original, isso pressupõe que DYLD_FALLBACK_LIBRARY_PATH não esteja vazio no começo. Se for, isso deixaria um : no final.

Como alternativa, se os seus caminhos não contiverem espaço em branco, basta colocar a string entre aspas e depois remover o espaço em branco:

export DYLD_FALLBACK_LIBRARY_PATH="/usr/local/cuda/lib:
   $HOME/anaconda2/lib:
   /usr/local/lib:/usr/lib:
   /opt/intel/compilers_and_libraries/mac/lib:
   /opt/intel/mkl/lib:
   $DYLD_FALLBACK_LIBRARY_PATH"
DYLD_FALLBACK_LIBRARY_PATH=${DYLD_FALLBACK_LIBRARY_PATH//[[:space:]]}

Isso é um pouco bobo:

prepend() { declare -n _n=$1; _n="$2$_n"; }
prepend DYLD_FALLBACK_LIBRARY_PATH /opt/intel/mkl/lib:
prepend DYLD_FALLBACK_LIBRARY_PATH /opt/intel/compilers_and_libraries/mac/lib:
prepend DYLD_FALLBACK_LIBRARY_PATH /usr/lib:
prepend DYLD_FALLBACK_LIBRARY_PATH /usr/local/lib:
prepend DYLD_FALLBACK_LIBRARY_PATH "$HOME/anaconda2/lib:"
prepend DYLD_FALLBACK_LIBRARY_PATH /usr/local/cuda/lib:
export DYLD_FALLBACK_LIBRARY_PATH
    
por 25.07.2018 / 23:32