Linux

將目錄添加到所有類似 PATH 的變數

  • October 9, 2018

是否有可以將根文件夾添加到所有類似路徑的變數的功能?目前我使用這個功能:

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
}

但我不知道它是否詳盡。

我不可能是唯一一個時不時想要這種功能的人,所以我認為必須是一些預先存在的方法來做到這一點。到目前為止,我還沒有找到任何東西。

請注意,這export與分配不同。聽起來您想要執行以下操作

function prepend_paths() {
   for P in $(env | grep PATH | sed 's/=.*//') ; do
       eval $P=${1}:\$$P ;
   done
}

即,將給定的前綴添加到名稱中帶有“PATH”的所有環境變數中。嵌入的$(env ..)sub 命令提供了該變數名稱列表。for 循環體中的工作行通過eval呼叫執行賦值,這很方便地執行P(首先進入變數名,然後進入該變數的值)的雙重評估。

然後,這些分配將保存在“此 shell”中,並且所有已標記為“導出”的變數都將傳播到子程序。如果您願意,當然可以添加明確export $P的語句,如果您覺得這是一件好事,也可以列印出來報告分配情況。

引用自:https://unix.stackexchange.com/questions/474048