Qual é o significado do seguinte código?

12

Alguém pode explicar o que esse comando significa?

PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
    
por Rashmi Narahari 27.05.2015 / 12:13

3 respostas

18

${GZIP_BINDIR-'/bin'} é um padrão de expansão do parâmetro bash . De man bash :

${parameter:-word}
              Use Default Values.  If parameter is unset or null, 
the expansion of word is substituted.  Otherwise, the  value  of parameter
is substituted.

Imediatamente antes desta página de manual da porção (graças a @jwodder para notificação):

Omitting the colon results in a test only for a parameter that is unset.

Como diz o manpage, ele definirá o valor padrão da variável GZIP_BINDIR . Se GZIP_BINDIR tiver um valor definido anteriormente (diferente de nulo, pois você não está usando : ), esse valor será usado, caso contrário, /bin será usado como o valor da variável GZIP_BINDIR .

Por outro lado, se você quiser testar valores nulos também, use esse padrão (inclua : ):

${GZIP_BINDIR:-'/bin'}

Depois disso, o $PATH será expandido para os valores que ele estava mantendo antes. Então, se PATH teve anteriormente:

/usr/sbin:/usr/bin

Agora, seu PATH será (considerando que GZIP_BINDIR não está definido):

/bin:/usr/sbin:/usr/bin

export PATH disponibilizará este PATH para todos os processos filhos.

    
por heemayl 27.05.2015 / 12:28
7

Existe realmente nenhum cólon antes do hífen dentro da expansão do parâmetro ${GZIP_BINDIR-'/bin'} ?

Esse tipo de construção é quase sempre escrito com dois pontos, como em ${GZIP_BINDIR:-'/bin'} , o que significa "se $ GZIP_BINDIR for NULL ou não definido, defina como '/ bin'"

No entanto, a sintaxe que você forneceu é válida, mas é rara. ${GZIP_BINDIR-'/bin'} (sem dois pontos) significa "se $ GZIP_BINDIR não está definido, configure para '/ bin'". Se estiver definido (foi declarado), mas nada atribuído a ele (por exemplo, é NULL), nada será inserido.

Pode haver um bug aqui como o cólon seguinte a variável construct (...} : $ PATH ...) will ainda será inserido se $ GZIP_BINDIR estiver definido mas NULL. Como isso adicionaria dois pontos no início do $ PATH, ele fará com que o diretório atual seja pesquisado primeiro.

Isso é considerado pela maioria como um problema de segurança, pois facilita a execução de um programa mal-intencionado com o mesmo nome dos comandos padrão, colocando-o no diretório atual.

Para deixar $ PATH inalterado se $ GZIP_BINDIR for definido, mas NULO (vazio), a sintaxe correta será ${GZIP_BINDIR-'/bin:'}$PATH; export PATH

Para deixar $ PATH inalterado se $ GZIP_BINDIR não estiver definido ou estiver definido, mas NULL, a sintaxe correta será ${GZIP_BINDIR:-'/bin:'}$PATH; export PATH

    
por DocSalvager 27.05.2015 / 15:55
2

Este comando atualiza a variável PATH.

O PATH é uma variável de ambiente que especifica um conjunto de diretórios onde os programas executáveis estão localizados.

PATH="${GZIP_BINDIR-'/bin'}:$PATH";

Isso adiciona o valor de outra variável GZIP_BINDIR se sair para o PATH anterior, senão use / bin e adicione-o ao PATH

export PATH

export é usado para definir o PATH disponível para todos os processos e subnós filhos Leia this para obter mais informações sobre

Você deve observar que isso não é estático e você o perderá assim que sair do seu shell.

Para tornar esta edição PATH permanente, você deve anexar essas linhas ao seu .bashrc

gedit .bashrc

e adicione a linha

export PATH="${GZIP_BINDIR-'/bin'}:$PATH"

execute o comando

source .bashrc
    
por Maythux 27.05.2015 / 12:19

Tags