すべてのパスのような変数にルートフォルダを追加する機能はありますか?現在私はこの機能を使用しています:
function prepend_paths() {
ROOT_PATH=$(readlink -f $1)
export PATH=$ROOT_PATH/bin:$PATH
export LD_LIBARY_PATH=$ROOT_PATH/lib:$LD_LIBARY_PATH
export LD_LIBARY_PATH=$ROOT_PATH/lib64:$LD_LIBARY_PATH
export C_INCLUDE_PATH=$ROOT_PATH/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=$ROOT_PATH/include:$CPLUS_INCLUDE_PATH
export PYTHONPATH=$ROOT_PATH/lib/python3.5/site-packages:$PYTHONPATH
export MANPATH=$ROOT_PATH/share/man:$MANPATH
}
しかし、それが完全なものかどうかはわかりません。
私は時々この機能が好きな人が私だけではないので、この機能を実行するための既存の方法があるべきだと思いました。しかし、これまで私は何も見つかりませんでした。
ベストアンサー1
これはexport
割り当てと同じではありません。次のことをしたいようです。
function prepend_paths() {
for P in $(env | grep PATH | sed 's/=.*//') ; do
eval $P=${1}:\$$P ;
done
}
つまり、名前に「PATH」を含むすべての環境変数に指定されたプレフィックスを追加します。含まれている$(env ..)
サブコマンドは変数名のリストを提供します。 forループ本体の作業行はcallを介して割り当てを行いますeval
。これは二重計算を便利に行いますP
(最初に変数名で、その後はその変数の値として)。
その後、これらの割り当ては、「このシェル」に保存され、「エクスポート済み」とマークされたすべての変数が子プロセスに伝播されます。もちろんexport $P
、必要に応じて明示的な説明を追加することができ、それが良いと思われる場合は、出力を印刷してジョブを報告することもできます。