2016-11-23 2 views
0

У меня есть внешняя программа (вид генератора токенов аутентификации), которая выводит две строки, две части моей аутентификации.Настройка переменных окружения из двух строк вывода

$ get-auth 
SomeAuthString1 
SomeAuthString2 

Тогда, я хочу, чтобы экспортировать эти строки в переменную окружения, скажем, AUTH и PIN.

Я пробовал несколько вещей в bash, но ничего не работает.

Например, я могу сделать:

get-auth | read -d$'\4' AUTH PIN 

но терпит неудачу. AUTH и PIN не сохраняются. Если я сделаю

get-auth | paste -d\ -s | read AUTH PIN 

он также терпит неудачу. Единственный способ получить данные - сделать

get-auth | { read AUTH; read PIN; } 

, но, очевидно, только в подоболочке. Экспорт из этого не имеет результата

Немного исследований, и я нашел this answer, что может означать, что я не могу этого сделать (читая переменную от чего-то, пробитого в чтение). Но я могу ошибаться. Я также обнаружил, что если я открою подоболочку с { перед чтением, значения будут доступны в подоболочке, пока я не закончу ее }.

Есть ли способ установить переменные среды из двухстрочного вывода? Я, очевидно, не хочу сохранять это в файле, и я не хочу настраивать FIFO только для этого. Это единственные способы добиться этого?

+0

Это что-то вроде: 'authstrings = \' get-auth \ '; экспорт AUTH = $ authstrings [0]; экспорт PIN = $ authstrings [1] 'возможно? – Gavin

+1

Обратите внимание, что '{...}' не создает подоболочку, а только группу. Это, как вы обнаружили, * pipe *, который создает подоболочку. – chepner

ответ

0

Подселл был проблемой. Я был в состоянии сделать его работу, выполнив:

read -d $'\4' AUTH PIN < <(get-auth) 
3

Вы можете использовать bashprocess-substitution, <() добиться того же с помощью команды read.

$ cat file 
123 
456 

С помощью правильной подстановки вы можете сохранить вывод команды. Использование read и \n как де-ограничитель как;

$ read -r -d'\n' a b < <(cat file) 
$ printf "%s %s\n" "$a" "$b" 
123 456 

Теперь переменные доступны в текущей оболочке, вы всегда можете export это.

+1

'<(...)' is * process * substitution, а не подстановка подстановки (которая является '$ (...)'). – chepner

+0

@chepner: Слишком много мышления при написании. :) исправлено сейчас – Inian

Смежные вопросы