2015-03-15 3 views
2

Это из Докер Docs - https://docs.docker.com/installation/mac/#install-boot2docker, почему может $() набор переменных окружения

Показать переменные среды для клиента Докер.

$ boot2docker shellinit 

Чтобы установить переменные окружения в оболочке сделать следующее:

$ $(boot2docker shellinit) 

Мой вопрос: Почему $(boot2docker shellinit) переменные окружения набор?

ответ

1

Why can $(boot2docker shellinit) set environment variables?

Посмотрите на следующую функцию (но это может быть команда или скрипт):

foo() { echo "export a=b"; } 

Эта команда только делает один это: печать export a=b на стандартный вывод:

$ foo() { echo "export a=b"; } 
$ foo 
export a=b 

Теперь command substitutionпозволяет выводить команду на замену самой команды. Поэтому, если вы запустите $(foo), тогда Bash сначала выполнит foo, а затем будет использовать вывод этой команды для сборки команды. В нашем случае выход будучи export a=b, Bash будет выполнять его:

$ declare -p a 
bash: declare: a: not found 
$ $(foo) 
$ declare -p a 
declare -x a="b" 
1

$(command) выполняет вывод command. Так boot2docker должен выдать что-то вроде:

export env1=val1 
export env2=val2 
.... 
export envN=valN 

который показывает значения переменных окружении, когда boot2docker запускается и устанавливает их, когда этот выход выполняется.

+0

Это также будет экспортировать переменную 'export' несколько раз, поэтому, скорее всего, это не выход' boot2docker'. Возможно: 'export a = b c = d' вместо этого. Ах, смешно, что в вашем ответе вы получите немного неправильной информации, с ответом, который приходит после моего и не добавляет ничего полезного, и я этого не делаю. Go figure ... SO - забавное место ':)'. –

+0

@gniourf_gniourf извините, я не понимаю, что вы подразумеваете под «переменной экспорта». 'export' - это встроенная команда bash, используемая для назначения и * экспорта * данного NAME для сред, выполняемых впоследствии выполненными командами. –

+0

Вы действительно думаете, что ваша строка будет запущена: 'export env1 = val1' _then_' export env2 = val2' и т. Д.? ответ - нет. Попробуйте сами: 'f() {echo echo hello; эхо-эхо-мир; } '. Эта функция выводит две отдельные строки: одна - «echo hello», вторая - «echo world». С вашими рассуждениями '$ (f)' выводит 'hello' и' world' на две отдельные строки. Тем не менее, '$ (f)' output' hello echo world'. Вы не заметили разбиения слов здесь? –

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