Я выполняю 2 сценария оболочки из основного с использованием источника.
main.sh:
#/bin/sh
a=1
b=2
c=3
gnome-terminal -x sh -c ". ./test1.sh|less" (note the source ".")
gnome-terminal -x sh -c ". ./test2.sh|less"
...
...
test1.sh:
#!/bin/sh
echo "a="$a #doesn't print anything
Мне удалось выполнить следующие 2 отдельно, но когда я объединяюсь, я не могу получить доступ к переменным main в другие файлы
gnome-terminal -x sh -c "test1.sh|less"
# может выполняться на отдельном терминале
. ./test1.sh
# может получать доступ к переменным из main.sh в test1.sh
Вы должны export
любые переменные, на которые нужно ссылаться в подоболочке.
В вашем примере поместите утверждение:
export a b c
где-то перед тем, как вызывать gnome-terminal
. В качестве альтернативы, определите переменные с помощью оператора экспорта:
export a=1 b=2 c=3
Я предполагаю, что вы источник test1.sh
, пытаясь обойти требование export
(поскольку исходный файл интерпретируется оболочкой источника, выполнено в подрубрике). Что вы упускаете из виду, так это то, что открытие gnome-terminal
запустит новую оболочку.
Переменные не совместно используются отдельными экземплярами оболочки. Единственным путем я знаю о получить доступ к переменной из сценария, запущенного в другой оболочке, должен иметь сценарий, пишут переменную в файл и затем доступ тот файл.
Теперь, в Вашем особом случае, можно отправить значение $a
переменная от основного сценария до сценария тестирования следующим образом:
main.sh:
#/bin/sh
a=1
b=2
c=3
gnome-terminal -x sh -c "test1.sh '$a' | less" # without source "."
# ... some other code
test1.sh:
#!/bin/sh
a=$1
echo "a=$a"
или, использовать export
поскольку awets сказал в его ответе.