1

Я начал этот вопрос с просмотра Добавить каталог в $ PATH, если его там еще нет. В моем случае я хотел сделать то же самое с LD_LIBRARY_PATH. Как это сделать без написания скрипта для каждой переменной?

2 ответа2

1

В соответствии с этой статьей 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
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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .