私の.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
改行文字を使用してこれを実行できます\
。また、次のように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