Alguém pode explicar o que esse comando significa?
PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
${GZIP_BINDIR-'/bin'}
é um bash
padrão de expansão de parâmetro. 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 porção, a página de manual (obrigado a @jwodder por notificar):
Omitting the colon results in a test only for a parameter that is unset.
Como diz a página de manual, ele definirá o valor padrão da variável GZIP_BINDIR
. Se GZIP_BINDIR
tiver um valor definido anteriormente (diferente de nulo, como 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 também valores nulos, use este padrão (incluir :
):
${GZIP_BINDIR:-'/bin'}
Depois disso, o $PATH
será expandido para os valores que estava mantendo antes. Então, se PATH
anteriormente tinha:
/usr/sbin:/usr/bin
Agora você PATH
será (considerando que GZIP_BINDIR
não está definido):
/bin:/usr/sbin:/usr/bin
export PATH
tornará isso PATH
disponível para todos os processos filhos.
:
em${GZIP_BINDIR-'/bin'}
" Não necessariamente.${parameter-word}
também é válido, embora não pareça estar na página de manual.:-
diz: "Ao não executar expansão de substring, usando os formulários documentados abaixo (por exemplo: :-), o bash testa um parâmetro não definido ou nulo. Omitindo os dois pontos resulta em um teste apenas para um parâmetro nãoPATH
eexport
em um único comando da seguinte maneira:export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
Realmente não há dois pontos 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
${GZIP_BINDIR:-'/bin'}
significa "se $ GZIP_BINDIR for NULL ou não estiver definido, defina-o 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 estiver definido, defina-o como '/ bin'". Se estiver definido (foi declarado), mas nada lhe for atribuído (por exemplo, é NULL), nada será inserido.Pode haver um erro aqui, pois os dois pontos a seguir a construção variável (...}
:
$ PATH ...) vai ainda ser inserido se $ GZIP_BINDIR é conjunto, mas NULL. Como isso adicionaria dois pontos no início do $ PATH, 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 malicioso com o mesmo nome dos comandos padrão, apenas colocando-o no diretório atual.
Para deixar $ PATH inalterado se $ GZIP_BINDIR estiver definido, mas NULL (vazio), a sintaxe correta seria
${GZIP_BINDIR-'/bin:'}$PATH; export PATH
Para deixar $ PATH inalterado se $ GZIP_BINDIR estiver desabilitado ou definido, mas for NULL, a sintaxe correta será
${GZIP_BINDIR:-'/bin:'}$PATH; export PATH
fonte
Este comando atualiza a variável PATH.
A
PATH
é uma variável de ambiente que especifica um conjunto de diretórios onde os programas executáveis estão localizados.Isso adiciona o valor de outra variável
GZIP_BINDIR
se sair para o PATH anterior, caso contrário, use / bin e adicione-o ao PATHexport é usado para definir o PATH disponível para todos os processos e subshells filhos Leia isto para obter mais informações sobre
Você deve observar que isso não é estático e você o perderá assim que sair do shell.
Para tornar esta edição PATH permanente, você deve anexar essas linhas ao seu
.bashrc
e adicione a linha
então execute o comando
fonte