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