Самый безопасный способ хранения значения переменной среды в файле

Простой перезапуск OpenVPN должен сделать это, если вы не настроили что-то, чтобы он отслеживал IP-адреса при перезапусках.

/etc/init.d/openvpn перезапуск

7
12.08.2019, 20:05
2 ответа

Если он сохраняется для последующего чтения (в bashскрипте ), просто используйте declare -p KEYи затем загрузите файл, чтобы прочитать его снова. Если вы хотите просто сохранить значение, используйте printf '%s\n' "$KEY", как если бы вы выводили любые переменные данные.

Итак,

printf '%s\n' "$KEY" >key.pem

или

printf 'BEGIN %s END\n' "$KEY" >key.pem

или что вам нужно вывести.

Ваша проблема возникает из-за того, что -nявляется допустимым вариантом для echoв bash. Строки -eи-E(и их комбинации, такие как -neEne), также вызовут проблемы в bashпо той же причине. В зависимости от того, как построен bash, среды или параметров, символы обратной косой черты в аргументах также могут быть проблемой.

Эти и другие вопросы описаны в следующих вопросах и ответах:

13
27.01.2020, 20:15

Многие системы имеют команду printenv, которая выводит содержимое заданной переменной окружения, за которой следует один символ новой строки, в стандартный вывод (printenv, появившийся в 3BSD в конце 70-х):

printenv 'My Env Var' > file

Сохранит содержимое переменной My Env Var, за которой следует NL, в fileво всех оболочках в этих системах.

Для переменных окружения, которые сопоставляются с переменными оболочки (, включают по крайней мере те, имя которых начинается с буквы ASCII или символа подчеркивания, за которым следует 0 или более букв ASCII, цифр или символа подчеркивания, и не являются специальными переменными, установленными в других случаях оболочка ), в Bourne -подобно оболочкам (работает и в fish), то же самое можно сделать и с:

printf '%s\n' "$ENVVAR" > file

(хотя, если переменная не установлена, это все равно сохранит пустую строку вfile)

Вrc-подобно оболочкам (, где все переменные оболочки сопоставляются с переменными окружения):

printf '%s\n' $ENVVAR > file
printf '%s\n' $'My Env Var' > file

(то же предостережение, что и выше)

Вcsh-как снаряды:

printf '%s\n' $ENVVAR:q > file

(если переменная не установлена, произойдет сбой и перезапись не произойдетfile)

Некоторые реализации/версии kshне имеют встроенного printf. В них вы также можете сделать:

print -r -- "$ENVVAR" > file
6
27.01.2020, 20:15

Теги

Похожие вопросы