Могу ли я использовать исходный файл test1.sh с gnome-terminal -x?

Я выполняю 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 в другие файлы

  1. gnome-terminal -x sh -c "test1.sh|less" # может выполняться на отдельном терминале

  2. . ./test1.sh # может получать доступ к переменным из main.sh в test1.sh

0
задан 2 October 2013 в 10:29

2 ответа

Вы должны export любые переменные, на которые нужно ссылаться в подоболочке.

В вашем примере поместите утверждение:

export a b c

где-то перед тем, как вызывать gnome-terminal. В качестве альтернативы, определите переменные с помощью оператора экспорта:

export a=1 b=2 c=3

Я предполагаю, что вы источник test1.sh, пытаясь обойти требование export (поскольку исходный файл интерпретируется оболочкой источника, выполнено в подрубрике). Что вы упускаете из виду, так это то, что открытие gnome-terminal запустит новую оболочку.

0
ответ дан 2 October 2013 в 10:29

Переменные не совместно используются отдельными экземплярами оболочки. Единственным путем я знаю о получить доступ к переменной из сценария, запущенного в другой оболочке, должен иметь сценарий, пишут переменную в файл и затем доступ тот файл.

Теперь, в Вашем особом случае, можно отправить значение $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 сказал в его ответе.

0
ответ дан 2 October 2013 в 10:29

Другие вопросы по тегам:

Похожие вопросы: