是否有一个函数可以将根文件夹添加到所有类似路径的变量中?目前我使用这个功能:
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 循环体中的工作线通过调用执行赋值eval
,这可以方便地执行双重计算P
(首先进入变量名称,然后进入该变量的值)。
然后,这些赋值将保存在“this shell”中,并且所有已标记为“导出”的变量将被传播到子进程。当然,export $P
如果您愿意,您可以添加明确的语句,如果您认为这是一件好事,也可以打印输出来报告作业。
答案2
问题是否“这是详尽无遗的?”很有趣。这个PATH
类似变量的列表怎么可能是详尽无遗的呢?你PATH
上面提到的,大多数 shell 都尊重这一点。并且LD_LIBARY_PATH
也受到大多数计划的认可。PYTHONPATH
Python 可执行文件确实很荣幸。但是,既然您不知道明天要安装哪个程序,那么您如何知道之前PATH
要设置哪个类似变量呢?
我想到了 Java,CLASSPATH
还有su
with ENV_ROOTPATH
。但是,让我们来构建一个假设的程序foo.exe
——SOME_WEIRD_PATH_VARIABLE_NAME
我们之前如何知道这个变量呢?也许其他一些程序会尊重另一个PATH
类似的变量,PATH_SET
但并不期望该变量被设置为文件路径但可能希望将其设置为1
或0
。我们不知道PATH_SET
要设置什么pwd
,嗯? :-)