Мне нужно сохранить переменные окружения в файл, и (позже) процесс должен импортировать их. Мне нужно это, чтобы обойти программу, fooprog
которая аннулирует окружение перед выполнением barscript
, и мне нужны некоторые переменные окружения в barscript
. Поэтому я планирую сохранить все переменные окружения в файл перед выполнением fooprogram
и сделать barscript
их источником из файла.
Я попробовал это, но это не работает, если есть переменные, содержащие пробелы.
$ env > my_environment
$ . my_environment
Думаю, правильный способ — это как-то повозиться с /proc/$$/environ
этим и проанализировать его barscript
, но я не могу найти правильный способ сделать это.
edit: Кавычки или переносы строк тоже проблематичны. Как можно сделать так, чтобы envars, такие проблемные, как следующие, могли быть получены без проблем?
PROBLEMATIC='this has double quotes " and single quotes '\'' and even
newlines.
See?'
решение1
$ declare -p > my_environment
Позже, внутри barscript
:
. my_environment
declare -p
выводит переменные среды в форме, которую может выполнить оболочка, включая кавычки и экранирование переменных по мере необходимости.
$ foobar='"some double-quoted text"'
$ echo $foobar
"some double-quoted text"
$ declare -p foobar
declare -- foobar="\"some double-quoted text\""
Кстати, если вы не хотите выводить всю среду, то и не нужно. Просто назовите переменные, которые вы хотите вывести, в declare -p
командной строке:
$ declare -p HOME PATH foobar
declare -x HOME="/home/cas"
declare -x PATH="/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11"
declare -- foobar="\"double-quoted-text\""
или выполнить конвейерную передачу, grep -v
чтобы исключить определенные переменные, которые вам не нужны в выводе.
Чтобы получить только экспортированные переменные:
declare -p -x > my_environment
Более подробную информацию см . help declare
в bash
.