Definir variável de ambiente para subshell

1

Eu sei que posso executar um comando com uma variável de ambiente como esta:

FOO=bar mycommand

Eu sei que posso executar comandos em um subshell assim:

(firstcommand && secondcommand)

Mas posso de alguma forma combinar os dois?

FOO=bar (firstcommand && secondcommand)

dá:

sh: syntax error: unexpected "("

pelo menos no shell do busybox (ash).

Editar: Kusalananda sugeriu FOO=bar sh -c 'first && second' , que é de fato uma solução. No entanto, também estou interessado em respostas alternativas, porque gosto da sintaxe de subshell, porque não é necessário mexer nas cotações.

    
por AndreKR 13.09.2017 / 20:03

2 respostas

4

Um caminho:

FOO=bar sh -c 'first && second'

Isso define a variável de ambiente FOO para o comando sh único.

Para definir várias variáveis de ambiente:

FOO=bar BAZ=quux sh -c 'first && second'

Outro:

( export FOO=bar; first && second )

Resumindo os comentários: O export é necessário para criar uma variável de ambiente (em oposição a uma variável do shell). A coisa com variáveis de ambiente é que elas são herdadas por processos filhos. Se first e second forem utilitários externos (ou scripts) que analisam seu ambiente, eles não verão a variável FOO sem o export .

    
por 13.09.2017 / 20:09
-1

Para exportação geral, adicione esta linha no makefile superior

SHELL:=NODE_PATH=. ${SHELL}

onde "NODE_PATH =." é um exemplo var

Eu uso isso neste projeto de exemplo:

link

    
por 05.10.2018 / 11:10