Você tem basicamente duas opções:
- Torne a variável uma variável de ambiente (
export TESTVARIABLE
) antes de executar o segundo script.
- Crie o 2º script, ou seja,
. test2.sh
e ele será executado no mesmo shell. Isso permitiria compartilhar facilmente variáveis mais complexas, como matrizes, mas também significa que o outro script poderia modificar variáveis no shell de origem.
ATUALIZAR:
Para usar export
para definir uma variável de ambiente, você pode usar uma variável existente:
A=10
# ...
export A
Isso deve funcionar em ambos bash
e sh
. bash
também permite que ele seja combinado da seguinte maneira:
export A=10
Isso também funciona no meu sh
(que por acaso é bash
, você pode usar echo $SHELL
para verificar). Mas eu não acredito que isso funcione de maneira garantida sh
, então é melhor jogar com segurança e separá-los.
Qualquer variável que você exportar dessa maneira será visível nos scripts executados, por exemplo:
cinza:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
Então:
$ ./a.sh
The message is: hello
O fato de que esses dois scripts de shell também é incidental. As variáveis de ambiente podem ser passadas para qualquer processo que você executa, por exemplo, se usamos o python, pode parecer com:
cinza:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.py
b.py:
#!/usr/bin/python
import os
print 'The message is:', os.environ['MESSAGE']
Abastecimento:
Em vez disso, poderíamos fonte como esta:
cinza:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
Então:
$ ./a.sh
The message is: hello
Isso "importa" mais ou menos b.sh
diretamente o conteúdo e o executa no mesmo shell . Observe que não precisamos exportar a variável para acessá-la. Isso compartilha implicitamente todas as variáveis que você possui, além de permitir que o outro script adicione / exclua / modifique variáveis no shell. Obviamente, nesse modelo, os dois scripts devem ter o mesmo idioma ( sh
ou bash
). Para dar um exemplo de como podemos passar mensagens para frente e para trás:
cinza:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
echo "[A] The message is: $MESSAGE"
b.sh:
#!/bin/sh
echo "[B] The message is: $MESSAGE"
MESSAGE="goodbye"
Então:
$ ./a.sh
[B] The message is: hello
[A] The message is: goodbye
Isso funciona igualmente bem bash
. Também facilita o compartilhamento de dados mais complexos que você não pode expressar como uma variável de ambiente (pelo menos sem muita sobrecarga de sua parte), como matrizes ou matrizes associativas.