Вы можете достичь желаемого результата без петли и без eval
.
source <(echo "$output")
<()
конструкция представляет собой замену процесса. Он выполняет команду, найденную внутри, создает FIFO (специальный файл с первым входом, первым выходом) и затем преобразуется в фактический путь к файлу (указывающий на FIFO), который может читать source
.
Конечно, вы также можете сохранить фактические назначения в файле, а не помещать их в переменную output
.
source config_file
source
команда (или более стандартная форма .
) считывает команды из файла и выполняет их в текущей оболочке, без запуска отдельного процесса или подоболочку, поэтому присвоения переменных в Sourced файлов работают. Полезно для конфигурационных файлов, но, конечно же, вы должны быть уверены, что никто не может помещать произвольные команды в эти файлы, поскольку это будет угрозой безопасности.
ВАЖНО
Если вы хотите поместить объявления в скрипте (set_token.sh
в вашем случае), этот сценарий необходимо быть получены (т.е. выполняется с source
или .
), не выполняется с bash
или позвонив по телефону он напрямую (если он является исполняемым).Любой метод, отличный от source
или .
, запустит дочерний процесс, и дочерний процесс не сможет назначить переменные, которые впоследствии будут видны родительскому процессу. Sourcing не создает отдельный процесс, поэтому задания будут работать. Ключевое слово export
сделает присваивания видимыми только для дочерних процессов, они не могут сделать назначения видимыми для родителя.
Вы устанавливаете переменные в среде подоболочки, когда вы трубу; см. [BashFAQ 24] (http://mywiki.wooledge.org/BashFAQ/024). –
@Tony Vu: Планируете ли вы рассказать нам о своем требовании? Ваша проблема решена или вы застряли? – Inian
После того, как вы исправите [BashFAQ # 24] (http://mywiki.wooledge.org/BashFAQ/024), тогда выполнение вашего скрипта установит три переменные ... и выйдет, а новые назначенные переменные исчезнут со смертью оболочку, в которую они были установлены. 'export'ing variable изменяет среду * child * процессов, а не родительских процессов. –