Chame o shell script “inline” em outro shell script

1

Portanto, a linha de fundo aqui é que estou tentando ter um trabalho de script para definir variáveis de ambiente (vamos chamá-lo de setenv.sh ) que será usado em scripts subseqüentes. No Windows (eu sei, essa é uma palavra de 4 letras aqui ...) Eu posso usar um arquivo de lote para definir uma variável de ambiente para após o arquivo de lote terminar. Eu estou procurando o mesmo efeito.

No entanto, acabo de aprender, lendo atentamente a internet, que as variáveis de ambiente definidas em um script (também conhecido como shell) persistem apenas em shells filho e não afetam os shells-pai. Tudo bem, bem, agora o que eu quero saber é que posso executar um script inline em outro script? Por inline , estou falando de algo análogo à diretiva #include do C / C ++. Eu quero isso, porque se eu posso chamar um script como se estivesse rodando no script atual, minhas variáveis de ambiente pelo menos persistiriam durante a duração do meu script desejado.

Por exemplo, algo assim:

cat ~/install/setenv.sh | /bin/bash
echo "JBoss home directory is set to $JBOSS_HOME"

Mas percebo que mesmo isso não funcionará, e estou iniciando um shell filho com uma chamada para /bin/bash . Eu estou bem se eu tiver que chamar isso setenv.sh para cada script que eu quero que seja executado em linha com.

    
por Michael Plautz 11.03.2014 / 21:55

1 resposta

4

se você quiser incluir variáveis de env, você pode definir essas variáveis em um arquivo e, em seguida, source desse arquivo em seu script.

Por exemplo: em myconfig eu poderia fazer:

#!/bin/bash
EDITOR=emacs
JBOSS_HOME=/path/to/jboss/home

então no meu script de shell:

#!/bin/bash
source /path/to/myconfig
echo "JBOSS home dir is $JBOSS_HOME" 

e isso funcionaria.

    
por sevis127 11.03.2014 / 22:00