Como posso usar matrizes de variáveis globais em aliases ou funções?

1

Estou tentando simplificar os procedimentos de trabalho repetitivos. Ao fazer isso, estou tentando escrever um script .bashrc que definirá as variáveis de caminho global às quais os aliases podem se referir. Isenção de responsabilidade: Sou novo no Linux e no script em geral, por isso não sei se a abordagem que tomei até este ponto está correta.

Aqui está o que escrevi até agora.

SET_DIR=/var/www/

#Set the current site's root directory
function sroot (){
    SET_DIR=/var/www/$1
    setaliases
    echo $SET_DIR
}

#Reinitialize aliases with new sroot
function setaliases(){
    alias chk="echo $SET_DIR"
    alias rt="cd $SET_DIR"
    alias thm="cd $SET_DIR/sites/all/themes/"
    alias mod="cd $SET_DIR/sites/all/modules"
}

setaliases

O que eu gostaria de fazer é expandir essa ideia para definir sites em uma matriz ou em um arquivo. Em seguida, use uma função que irá verificar o valor passado para a função sroot. Por sua vez, isto irá definir variáveis em outras funções.

#myfile or array
site=example1.com
theme=alpha
shortcut=x1 

site=example2.com
theme=beta
shortcut=x2

Por exemplo, "sroot x1" afetaria

SET_DIR=/var/www/$site
# and
alias thm="cd $SET_DIR/sites/all/themes/$theme"

Como configuro a função para verificar um valor em uma matriz e, em seguida, uso suas variáveis?

    
por dimmech 29.07.2014 / 19:42

1 resposta

1

Quando você escreve:

alias thm="cd $SET_DIR/sites/all/themes/"

você está expandindo o valor de SET_DIR no momento em que define o alias. Isso significa que você obtém o mesmo valor sempre que executar o alias, mesmo que tenha alterado o valor da variável entre elas. Se você voltar a usar a barra invertida para $ , a variável será desreferenciada quando você usar o alias:

$ foo=hello
$ alias test="echo \$foo"
$ test
hello
$ foo=world
$ test
world

Portanto, se você definir os aliases dessa forma, não precisará redefini-los quando alterar SET_DIR . Você também pode citar a definição do alias.

Para o seu arquivo de dados, o Bash 4 suporta os arrays associativos , que permitem que você defina seus dados assim:

declare -A theme site # This makes these variables associative arrays
add_site() {
    local shortcut=$1
    theme[$shortcut]=$2
    site[$shortcut]=$3
}
add_site x1 example1.com alpha
add_site x2 example2.com beta

Você pode acessar os valores com, por exemplo, %código%. Seus aliases podem assumir o formato:

alias thm="cd /var/www/\${site[\$CURRENT]}/sites/all/themes/\${themes[\$CURRENT]}"

Sua função ${theme[x1]} iria então definir sroot para a chave que você queria. O alias sempre levaria você ao diretório correto no site atual.

Existem outras abordagens para definir as matrizes em particular, mas isso lhe dará uma ideia geral.

    
por 29.07.2014 / 23:52