Básicamente tienes dos opciones:
- Convierta la variable en una variable de entorno (
export TESTVARIABLE
) antes de ejecutar el segundo script.
- Fuente del segundo script, es decir,
. test2.sh
y se ejecutará en el mismo shell. Esto le permitiría compartir variables más complejas como matrices fácilmente, pero también significa que el otro script podría modificar las variables en el shell de origen.
ACTUALIZAR:
Usar export
para establecer una variable de entorno, puede usar una variable existente:
A=10
# ...
export A
Esto debería funcionar en ambos bash
y sh
. bash
También permite que se combine así:
export A=10
Esto también funciona en mi sh
(que resulta serbash
, puede usar echo $SHELL
para verificar). Pero no creo que esté garantizado que funcione en todos sh
, así que lo mejor es ir a lo seguro y separarlos.
Cualquier variable que exporte de esta manera será visible en los scripts que ejecute, por ejemplo:
ceniza:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
Luego:
$ ./a.sh
The message is: hello
El hecho de que ambos sean scripts de shell también es incidental. Las variables de entorno se pueden pasar a cualquier proceso que ejecute, por ejemplo, si usamos python en su lugar, podría verse así:
ceniza:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.py
b.py:
#!/usr/bin/python
import os
print 'The message is:', os.environ['MESSAGE']
Abastecimiento:
En su lugar, podríamos fuente como esta:
ceniza:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
Luego:
$ ./a.sh
The message is: hello
Esto más o menos "importa" el contenido de b.sh
directamente y lo ejecuta en el mismo shell . Tenga en cuenta que no tuvimos que exportar la variable para acceder a ella. Esto comparte implícitamente todas las variables que tiene, así como permite que el otro script agregue / elimine / modifique variables en el shell. Por supuesto, en este modelo, ambos scripts deben ser del mismo idioma ( sh
o bash
). Para dar un ejemplo de cómo podríamos pasar mensajes de un lado a otro:
ceniza:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
echo "[A] The message is: $MESSAGE"
b.sh:
#!/bin/sh
echo "[B] The message is: $MESSAGE"
MESSAGE="goodbye"
Luego:
$ ./a.sh
[B] The message is: hello
[A] The message is: goodbye
Esto funciona igualmente bien en bash
. También facilita compartir datos más complejos que no podría expresar como una variable de entorno (al menos sin un poco de trabajo pesado de su parte), como las matrices o las matrices asociativas.