Окружающая среда: Старая версия systemd работает в контейнере. По умолчанию службы systemd не получают переменные среды в контейнере, потому что systemd удаляет их для новых запущенных процессов. Более новые версии позволяют передавать переменные через директивы systemd, но здесь нецелесообразно использовать более новую версию.convert/proc/1/environ to variables script
я должен использовать некоторые из переданных переменных среды для сценария, и первоначально это было легко, я думал, это небольшой скрипт, уже делает 90% работы
$ cat /proc/1/environ |tr '\0' '\n'
HOME=/
TERM=linux
Но теперь у меня есть переменные окружения, содержат «\ п», что приведет к чему-то вроде того, что
VAR=totally
screwed
up
или даже содержат = или другие специальные utf8 символов и т.д.
есть ли умный, почему в правильно ли получить этот контент для скрипта, который просто присваивает значения переменным?
В конце концов, вероятно, это приведет к чему-то подобному.
VAR="totally\nscrewed\up"
, похоже, не работает для меня (TM). он по-прежнему создает «вкрутую» «вверх» в виде отдельных строк в массиве vars ([0] = VARS = полностью »[1] =« завинчивается »[2] =« вверх ») – Mandragor
@Mandragor OK, да не работает. Попробуйте этот трюк - это должно работать: 'readarray -t vars2 <<(cat file4 | tr -d '\ n' | tr '\ 0' '\ n')'. Фактически мы удаляем любую новую строку из исходного файла и то мы преобразуем нулевые байты в новые строки. Мы не можем пропустить это так: –
hmm, мне нужно «\ n» позже, поэтому в основном он должен содержать это, как сказано выше, что-то вроде VAR = «полностью \ nscrewed \ nup «помогает для проблемы \ n, поэтому, если строка содержит« также должна быть экранирована ... и т. д. – Mandragor