На этот вопрос уже есть ответ:
У меня есть сценарий bash, который должен вызывать другой сценарий bash, который зависит от пользователя, чтобы получить некоторую информацию о конфигурации, например:
somescript:
#!/bin/bash
${HOME}/.ssconfig
echo "Hello, ${VARIABLE}!"
~ / .ssconfig
#!/bin/bash
VARIABLE=world
Который , вместо того, чтобы дать мне Hello, world!
, как ожидалось, дает мне Hello,!
Как я могу передать переменные из сценария в тот, который его вызвал?
Выполнение сценария не может влиять на оболочку, которая назвала его, так как сценарий работает в его собственной оболочке. Для влияния на оболочку вызова Вам нужно к источник сценарий:
$ help source
source: source filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Следовательно, строка, где Вы выполняете конфигурационный файл, должна быть изменена для определения источника его:
#!/bin/bash
source ${HOME}/.ssconfig
echo "Hello, ${VARIABLE}!"
Примечание, которое source
является командой оболочки, таким образом, справка для него не находится в man source
, но help source
.