2 скрипта A и B.В скрипте B есть некоторые переменные, которые должны использоваться в A. Как я должен это делать

#shell #unix #solaris

#оболочка #unix #solaris

Вопрос:

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

Комментарии:

1. Есть ли в скрипте B код, который не должен выполняться при вызове в скрипте A?

Ответ №1:

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

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

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

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

и затем в A я делаю:

 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 (имейте в виду, что это нарушение функциональной иерархии и считается нарушением функциональной иерархии).плохое кодирование).

Комментарии:

1. отличный ответ, жаль, что OP не может быть немного более конкретным в отношении того, что они пытаются сделать;-), оставляя нам догадываться и 2-е предположение… Удачи всем.

Ответ №2:

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

Ответ №3:

Попробуйте

  # 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