仅向任何变量添加一次目录

仅向任何变量添加一次目录

我开始问这个问题时如果目录尚不存在,则将其添加到 $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

相关内容