내 .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/3768 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