Quando usamos a set -k
opção no bash?
O manual de referência do Bash diz:
Todos os argumentos na forma de instruções de atribuição são colocados no ambiente para um comando, não apenas aqueles que precedem o nome do comando.
Entendo o que a opção faz, mas não conseguia imaginar quando precisamos dela.
-k
que nos permite executar scripts shell 30 anos de idade, sem a necessidade de refazer-los. Passar variáveis de ambiente temporários usando a sintaxe de prefixo em vez disso:var1=x var2=y command ...
Respostas:
Você pode basicamente usá-lo sempre que quiser "injetar" as variáveis de ambiente passadas para um script de shell (como argumentos) como se elas fossem definidas no ambiente via
export
, mas sem ter que residir permanentemente naexport
lista antes de executar comandos .NOTA: Também existe a forma longa do
-k
comutadorset -o keyword
,.Exemplo
Agora se eu
set -k
:Mas se eu fosse executar o script acima:
O que a exportação está fazendo?
Portanto, se adicionarmos
export | grep VAR
ao nosso script da seguinte forma:E executamos nossos testes acima novamente:
Mas sem
set -k
:O
set -k
que nos permite exportar temporariamente variáveis em massa.Outro exemplo
Quando definimos várias variáveis, todas são exportadas:
Então é só injetar todas as variáveis de ambiente?
Não,
-k
está fazendo uma coisa muito explícita aqui. É apenas exportar variáveis que foram incluídas na linha de comando quando um comando foi executado.Exemplo
Digamos que eu defina esta variável:
Agora, quando executamos o mesmo comando, omitindo
VARCMD1="hi"
:Mas por que isso existe?
Encontrei esta fonte que explica um pouco sobre esse recurso, intitulado: "Keyword Parameter Assignment Strings". NOTA: O URL de origem usa um endereço IP, então não posso ligar para ele diretamente aqui na SE.
fonte
set -k
eles deram-o keyword
além da-k
opção. Isso significa alguma coisa?set -o keyword
é a forma longa deset -k
. Vejahelp set | grep -- '-k'
../cmd.bash VARCMD=hi
precisaset -k
fazê-lo funcionar exatamente comoVARCMD=hi ./cmd.bash
faz sem oset -k
. Adivinha pergunta específica do OP é em torno da necessidade de bash para apoiar o./cmd.bash VARCMD=hi
formulárioQualquer uso prático
set -k
provavelmente é apenas estilo pessoal. Alguns - talvez aqueles que gostam de linguagens de programação que oferecem a capacidade de usar argumentos de palavras-chave em chamadas de função ou aquelas poucas pessoas que gostamdd
da sintaxe do comando - possam preferirpara
A razão real pela qual a opção existe em alguns shells é explicada na lógica do comando set no padrão POSIX :
fonte