У меня есть сценарий оболочки (назовем его parent.sh), который вызывает другой скрипт оболочки (child.sh), передавая ему аргумент.Обмен переменными между сценариями оболочки
Детский скрипт выполняет некоторую работу и устанавливает значение в переменной с именем create_sql
. Я хочу получить доступ к этой переменной create_sql
из родительского скрипта, который ее вызвал.
Я зову ребенка скрипт внутри родительского сценария, как это:
./child.sh "$dictionary"
и сразу после этого у меня есть строка:
echo "The resulting create script is: "$create_sql
Однако, нет никакого значения однако, в дочернем скрипте я делаю то же самое, и переменная определенно задана.
Как я могу заставить это работать, чтобы читать переменные, созданные дочерним скриптом?
Вкратце, вы не можете этого сделать, если вы не сделаете что-то вроде '. ./child.sh "$ dictionary" (или в Bash, подражая оболочке C, 'source ./child.sh" $ dictionary "). Это считывает и исполняет скрипт в среде текущей оболочки, но может взаимодействовать с другими переменными в скрипте 'parent.sh' - между сценариями нет изоляции. В противном случае дочерний процесс не может безопасно установить среду родительской оболочки.(Если вы хотите сделать это безумно, вы можете запустить дочернюю оболочку отладчика, подключиться к процессу родительской оболочки и установить среду таким образом, но «безумный» вежлив). –
Хорошо, как я могу реализовать эту функциональность? Должен ли я просто поместить содержимое дочернего скрипта в родительский скрипт? Это была моя попытка модуляции сценариев. – jcm
Возможно, лучший способ - это получить «child.sh» echo значение, которое вы хотите в '$ create_sql', а затем вы используете' create_sql = $ (./ child.sh «$ dictionary») 'без пробелов вокруг оператора присваивания. –