如何打破 .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 是否被视为 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/376​​8 https://www.linuxjournal.com/article/3935

addpath仅当路径中最初不存在该条目时,该函数才会将其添加到路径中。delpath -n从路径中删除所有不存在的目录。

您可以pathfunc.tgzhttps://web.archive.org/web/20061210054813/http://www.netspinner.co.uk:80/Downloads/pathfunc.tgz

相关内容