我开始问这个问题时如果目录尚不存在,则将其添加到 $PATH。就我而言,我也想对 LD_LIBRARY_PATH 执行相同操作。如何在不为每个变量编写脚本的情况下做到这一点?
答案1
pathmunge
鉴于/etc/profile 中的变化
munge () {
if [[ ":${!1}:" != *:"$2":* ]]; then
if [[ $3 == after ]]; then
declare -g $1="${!1}:$2"
else
declare -g $1="$2:${!1}"
fi
fi
}
我们可以做的:
$ A=a
$ munge A b after
$ echo $A
a:b
$ munge A c before
$ echo $A
c:a:b
$ munge A a before
$ echo $A
c:a:b
答案2
根据这篇文章,http://www.linuxjournal.com/content/return-values-bash-functions,可以修改外部变量,给定其名称,如下所示:
function myfunc()
{
local __resultvar=$1
local myresult='some value'
eval $__resultvar="'$myresult'"
}
myfunc result
echo $result
现在,使用此脚本和原始问题,我编写了两个函数,一个用于在当前值之前添加,一个用于在当前值之后添加:
function add_directory_before()
{
local VAR=$1
local VALUE=$(eval echo \$${VAR})
if [ -d $2 ] && [[ ":$VALUE:" != *":$2:"* ]] ; then
eval $VAR=$2:$VALUE
fi
}
function add_directory_after()
{
local VAR=$1
local VALUE=$(eval echo \$${VAR})
if [ -d $2 ] && [[ ":$VALUE:" != *":$2:"* ]] ; then
eval $VAR=$2:$VALUE
fi
}
和用法:
add_directory_after LD_LIBRARY_PATH /usr/local/lib64
或者
add_directory_before PATH $HOME/bin