У вас є два варіанти:
- Зробіть змінну середовищем змінною (
export TESTVARIABLE) перед виконанням 2-го сценарію.
- Джерело другого сценарію, тобто
. test2.shвін буде працювати в одній оболонці. Це дозволить вам легко ділитися складнішими змінними, такими як масиви, але також означає, що інший скрипт міг би змінювати змінні у вихідній оболонці.
ОНОВЛЕННЯ:
Щоб exportвстановити змінну середовища, ви можете використовувати наявну змінну:
A=10
# ...
export A
Це повинно працювати в обох bashі sh. bashтакож дозволяє поєднувати його так:
export A=10
Це також працює в моєму sh (що, можливо bash, ви можете використовувати echo $SHELLдля перевірки). Але я не вірю, що це гарантовано працює у всіх sh, тож найкраще відігравати його в безпеці та розділити їх.
Будь-яка змінна, яку ви експортуєте таким чином, буде видно у виконаних сценаріях, наприклад:
зола:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
Тоді:
$ ./a.sh
The message is: hello
Той факт, що це обидва сценарії оболонки, також просто випадковий. Змінні середовища можуть бути передані в будь-який процес, який ви виконуєте, наприклад, якщо ми замість цього використовували python, це може виглядати так:
зола:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.py
b.py:
#!/usr/bin/python
import os
print 'The message is:', os.environ['MESSAGE']
Sourcing:
Натомість ми можемо джерелом так:
зола:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
Тоді:
$ ./a.sh
The message is: hello
Це більш-менш "імпортує" вміст b.shбезпосередньо і виконує його в одній оболонці . Зверніть увагу, що нам не довелося експортувати змінну для доступу до неї. Це неявно розділяє всі ваші змінні, а також дозволяє іншому сценарію додавати / видаляти / змінювати змінні в оболонці. Звичайно, у цій моделі обидва ваші сценарії повинні бути однаковою мовою ( shабо bash). Щоб навести приклад, як ми могли передавати повідомлення вперед і назад:
зола:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
echo "[A] The message is: $MESSAGE"
b.sh:
#!/bin/sh
echo "[B] The message is: $MESSAGE"
MESSAGE="goodbye"
Тоді:
$ ./a.sh
[B] The message is: hello
[A] The message is: goodbye
Це однаково добре працює в bash. Це також дозволяє легко обмінюватися складнішими даними, які ви не могли б виразити як змінну оточення (принаймні, без важкого підйому з вашого боку), як масиви або асоціативні масиви.