Alguém pode explicar o que esse comando significa?
PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
Alguém pode explicar o que esse comando significa?
PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
Respostas:
${GZIP_BINDIR-'/bin'}é um bashpadrã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_BINDIRtiver um valor definido anteriormente (diferente de nulo, como você não está usando :), esse valor será usado, caso contrário, /binserá 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 $PATHserá expandido para os valores que estava mantendo antes. Então, se PATHanteriormente tinha:
/usr/sbin:/usr/bin
Agora você PATHserá (considerando que GZIP_BINDIRnão está definido):
/bin:/usr/sbin:/usr/bin
export PATHtornará isso PATHdisponível para todos os processos filhos.
:-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ão
PATHe exportem 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
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.
PATH="${GZIP_BINDIR-'/bin'}:$PATH";
Isso adiciona o valor de outra variável GZIP_BINDIRse sair para o PATH anterior, caso contrário, use / bin e adicione-o ao PATH
export PATH
export é 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
gedit .bashrc
e adicione a linha
export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
então execute o comando
source .bashrc
:em${GZIP_BINDIR-'/bin'}" Não necessariamente.${parameter-word}também é válido, embora não pareça estar na página de manual.