Пусть bash-скрипт выводит строку внутри другого bash-скрипта - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть скрипт bash bash-one.sh, который вызывает bash-two.sh внутри него. Я хочу, чтобы bash-two.sh экспортировал некоторую строку после ее запуска (эта строка зависит от некоторых вещей, происходящих внутри скрипта), чтобы выполняемый скрипт bash-one.sh мог использовать его позже

Я былпытаясь получить bash-two.sh echo $BLAH, но это не работает. Я также попытался иметь это export $BLAH без удачи также ...

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

Есть и другой способ выполнить эту задачу.

В вашем скрипте bash2 вы можете применить перенаправление вывода, как показано ниже:

exec 3>&1 1>/dev/tty

Этот комнанд находится в началескрипт сохранит позицию stdout в файловом дескрипторе 3 и заставит stdout (fd 1) печататься на экране.

Затем вы можете вызвать из script2 переменные, которые вы хотите использовать для fd3, например, так::

echo "$BLAH" >&3

Таким образом вы можете получить из script1 выходные данные script2, используя

testvar="$(bash-two.sh)"

Тест:

cat sc1.sh
exec 3>&1 1>/dev/tty
echo "hello from sc1"           #By default will be printed to >&1, redirected to /dev/tty=screen 
sc1var="this comes from sc1"
echo "$sc1var" >&3

localvar=$(bash sc1.sh)
hello from sc1            #forced to be printed on /dev/tty

echo "$localvar"
this comes from sc1
0 голосов
/ 01 ноября 2019

Спасибо @Barmar за простое решение! Я просто получил bash-two.sh, чтобы получить доступ к необходимой мне переменной

т.е.

bash-one.sh :

#!/bin/bash

source ./bash-two.sh $1
echo "${TEST_VARIABLE}"

bash-two.sh :

#!/bin/bash

TEST_VARIABLE=$1 

"Дочерний процесс не может устанавливать переменные непосредственно в родительском процессе. Экспорт происходит только в одном направлении, от родителя к потомку. "-Бармар

...