Eu comecei esta questão olhando Adicione o diretório a $ PATH, se ainda não estiver lá . No meu caso, eu queria fazer o mesmo com o LD_LIBRARY_PATH também. Como fazer isso sem escrever um script para cada variável?
1
Eu comecei esta questão olhando Adicione o diretório a $ PATH, se ainda não estiver lá . No meu caso, eu queria fazer o mesmo com o LD_LIBRARY_PATH também. Como fazer isso sem escrever um script para cada variável?
Dada uma variação de pathmunge
em / etc / profile
munge () {
if [[ ":${!1}:" != *:"$2":* ]]; then
if [[ $3 == after ]]; then
declare -g $1="${!1}:$2"
else
declare -g $1="$2:${!1}"
fi
fi
}
Nós podemos fazer:
$ 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
De acordo com este artigo, http://www.linuxjournal.com/content/return-values-bash-functions , é possível modificar uma variável externa, dado seu nome, assim:
function myfunc()
{
local __resultvar=$1
local myresult='some value'
eval $__resultvar="'$myresult'"
}
myfunc result
echo $result
Agora, usando este script e a pergunta original, escrevi duas funções, uma para adicionar antes do valor atual e outra para adicionar depois:
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
}
e o uso:
add_directory_after LD_LIBRARY_PATH /usr/local/lib64
ou
add_directory_before PATH $HOME/bin
eval
:local value="${!1}"
- isso é "indireto variável", veja gnu.org/software/bash/manual/…PATH=foo
e depois me pergunto por que seu roteiro está quebrado