Adiciona o diretório apenas uma vez a qualquer variável

1

Eu comecei esta questão olhando para Adicionar diretório para $ 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?

    
por user666412 11.12.2014 / 15:25

2 respostas

1

Dada uma variação em 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
    
por 11.12.2014 / 16:22
1

De acordo com este artigo, link , é 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 esse 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
    
por 11.12.2014 / 15:25

Tags