Definindo a variável de ambiente usando o shell script

1

Estou usando scripts csh para algum propósito de automação. Eu tenho um número de scripts, e o começo de tudo o que eu preciso para definir um conjunto fixo de variáveis de ambiente.

|----SCRIPT 1---|     |----SCRIPT 2---|
|# set env vars |     |# set env vars |
|               |     |               |
|# do something |     |# do something |
|               |     |# else         |

Então, pensei em colocar todas as variáveis de ambiente em outro script e fornecê-las em cada arquivo. Mas, como se vê, as variáveis de ambiente definidas dentro do script de origem não são refletidas externamente. Existe alguma maneira limpa de conseguir o que eu quero? Ou preciso definir explicitamente as variáveis de ambiente em cada script?

ATUALIZAÇÃO:

Ao fazer o sourcing do arquivo, eu estava colocando a saída em um arquivo usando o comando 'tee'. Percebi que depois de remover o pipe, o arquivo de script funcionava.

    
por johngreen 19.01.2016 / 06:56

1 resposta

0

Sim, canalizar a saída de source executará essa parte do pipeline em um subshell, o que significa que qualquer variável de ambiente definida pela origem do outro arquivo não afetará o ambiente do script.

Exemplo:

environment.csh :

setenv string "hello world"
echo 'The environment is now set up'

script.csh :

#!/bin/csh

source environment.csh | tee output
printf 'string is "%s"\n' "$string"

A saída da execução script.csh será

The environment is now set up
string: Undefined variable.

Remover o canal para tee fará com que seja emitido

The environment is now set up
string is "hello world"
    
por 27.04.2018 / 11:52