2 сценария A и B. В скрипте B есть некоторые переменные, которые должны использоваться в A. Как мне поступить? - PullRequest
0 голосов
/ 28 октября 2011

У меня есть два сценария A и B. В сценарии B есть некоторые переменные, которые должны использоваться в A. Также мне нужно вызывать сценарий B через сценарий A. Как мне это сделать?

Ответы [ 3 ]

1 голос
/ 28 октября 2011

Звучит так, как будто у вас есть информация о конфигурации, которую можно прочитать из A или B, если это простая информация о конфигурации, то она должна быть указана в третьем файле C, который получен из A и B с использованием . ./Cмеханизм.

если вы пытаетесь вызвать B из A, установите переменную в вызове B и затем прочитайте это значение в A, тогда, если вы используете стандарт ./B, то всепеременные, которые устанавливаются в вызове B, не копируются обратно в среду A.

Наиболее разумный способ «разделения переменных» между сценариями - это вызов вызываемого сценария для вывода переменных, которые необходимы A.использовать во временный файл, а затем получить его из A после того, как B завершил его выполнение.Более сложные способы включают B, выводящий переменные в eval'able строку, которая вычисляется в A, например, если B содержит:

#!/bin/bash -p
echo var=22

, а затем в AI делают:

output=$(./B)
eval $output
echo $var

Я быполучить вывод 22.Это сложно сделать правильно, и на него следует полагаться только для краткого списка переменных, передаваемых между сценариями.

Реальный способ заставить сценарии совместно использовать переменные - это заставить их содержать только функции,и иметь главный сценарий, который вызывает функции в A и B после их поиска, например,

#!/bin/bash -p

. ./A
. ./B

do_a_stuff
echo $shared_variable
do_b_stuff
echo $shared_variable

, если в A есть код, который зависит от кода в B, то, получив их, вы получитеединое пространство имен, которое совместно используется ими, так что вы можете вызывать функции в B из A и A из B (учтите, что это нарушение функциональной иерархии и считается плохим кодированием).

0 голосов
/ 31 октября 2013

Попробуйте

 # cat B
 #!/bin/bash
 echo "Date is: `date`"

 # cat A
 #!/bin/bash
 echo "You are login as: `whoami`"
 echo "`/bin/sh ./B`" # exact path for the script file

выход:

  # ./A
  You are login as: root
  Date is: Thu Oct 17 02:56:36 EDT 2013
0 голосов
/ 28 октября 2011

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

...