.bash_profile에서 긴 줄을 끊는 방법

.bash_profile에서 긴 줄을 끊는 방법

내 .bash_profile에 다음과 같은 긴 줄이 있습니다.

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

이 줄을 여러 줄로 나누려면 어떻게 해야 합니까?

또한 .bash_profile은 쉘 스크립트로 간주됩니까? 그렇지 않다면 구체적으로 어떤 범주에 속합니까? 이 사실을 알았다면 파일의 일반적인 형식 지정 지침을 찾아볼 수 있었을 것입니다.

답변1

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

또는 배열과 문자열 연결을 사용하세요.

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"}
)

IFS=:$IFS
export DYLD_FALLBACK_LIBRARY_PATH="${paths[*]}"
IFS=${IFS#?}

배열의 마지막 항목은 DYLD_FALLBACK_LIBRARY_PATH변수 값으로 확장되며, 설정되지 않거나 비어 있으면 아무것도 확장되지 않습니다.

확장은 변수의 첫 번째 문자로 구분된 "${paths[*]}"단일 문자열로 연결된 경로가 되며 임시로 로 설정됩니다 .IFS:

답변2

개행 문자를 사용하여 이를 수행할 수 있습니다: \. 또한 다음과 같이 서로 다른 두 줄로 선언하고 내보내야 합니다.

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

Bash 프로필은 구성 파일이자 일종의 스크립트입니다.

답변3

Bash이므로 string( var+=value)에 추가할 수 있습니다. 원래 값의 경로 앞에 접두사를 붙이기 때문에 여기에는 임시 변수가 매우 필요합니다.

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

원본 스니펫과 마찬가지로 DYLD_FALLBACK_LIBRARY_PATH처음부터 비어 있지 않다고 가정합니다. 그렇다면 :흔적이 남을 것입니다.


또는 경로에 공백이 포함되어 있지 않으면 문자열을 따옴표로 묶고 공백을 제거하세요.

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:]]}

이것은 약간 어리석은 일입니다.

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

답변4

나는 2000년에 Linux Journal에 설명된 Stephen Collyer의 bash_path_funcs를 사용합니다.

https://www.linuxjournal.com/article/3645 https://www.linuxjournal.com/article/376​​8 https://www.linuxjournal.com/article/3935

addpath이 함수는 처음에 해당 항목이 경로에 존재하지 않는 경우에만 경로에 항목을 추가합니다. delpath -n경로에서 존재하지 않는 디렉터리를 제거합니다.

당신은 pathfunc.tgz부터 시작할 수 있습니다https://web.archive.org/web/20061210054813/http://www.netspinner.co.uk:80/Downloads/pathfunc.tgz

관련 정보