![如何打破 .bash_profile 中的长行](https://linux22.com/image/137540/%E5%A6%82%E4%BD%95%E6%89%93%E7%A0%B4%20.bash_profile%20%E4%B8%AD%E7%9A%84%E9%95%BF%E8%A1%8C.png)
我的 .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 是否被视为 shell 脚本?如果不是,那么它具体属于什么类别?如果我知道这一点,我将能够查找该文件的一般格式指南。
答案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,因此您可以附加到字符串 ( 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
我使用 Stephen Collyer 的 bash_path_funcs,早在 2000 年就在 Linux Journal 中进行了描述:
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