Qual é a diferença entre definir as variáveis de ambiente dessas duas maneiras?

2

Para um projeto em que estou trabalhando, precisamos de nginx e lua, e começamos assim:

MYVAR1=some_value MYVAR2=some_value /usr/local/openresty/nginx/sbin/nginx -p 'pwd'/ -c nginx.conf

E tudo funciona. Se, em vez disso, fizermos isso:

export MYVAR1=some_value
export MYVAR2=some_value
/usr/local/openresty/nginx/sbin/nginx -p 'pwd'/ -c nginx.conf

Em seguida, um script lua em execução no processo worker reclama que MYVAR1 e MYVAR2 não estão definidos. Qual é a diferença entre esses 2, e porque não é nginx + lua pegá-los na segunda versão?

    
por Geo 02.04.2015 / 09:18

1 resposta

2

Se estiver sendo executado em bash , não deverá haver diferença, exceto que MYVAR1 e MYVAR2 continuarão a ser definidos para o mesmo valor depois que /usr/local/openresty/nginx/sbin/nginx terminar a execução. A primeira sintaxe que você mostrou terá apenas as variáveis para o tempo de vida da execução de nginx .

Agora, se você não estiver usando bash , (por exemplo, /bin/sh ou outro shell compatível com POSIX), você pode precisar de uma sintaxe alternativa, configurando as variáveis de ambiente antes de export ing:

MYVAR1=some_value
export MYVAR1

MYVAR2=some_value
export MYVAR2

Não tenho certeza se você está fazendo isso de um terminal do shell ou por meio de um script de shell, mas é possível determinar isso por meio de:

ps -ef | grep $$ | grep -v grep

Se for /bin/sh ou algum outro shell, esse é o seu problema. Se você estiver fazendo isso dentro de um script de shell, poderá alterar a linha shebang ( #!/... na parte superior do arquivo) para #!/bin/bash em vez de #!/bin/sh ou usar a sintaxe compatível com sh.

    
por 02.01.2016 / 09:34