Я хотел бы сохранить общесистемную переменную среды в etc/environment
в AWS Linux AMI 2013.03. В этом примере я пытаюсь сохранить фразу «# hello». См. Примеры ниже. echo $control
производит
hello
Я ожидал echo $test0
(ниже) для производства:
#hello
но вместо этого выводится пустая строка. Ниже приводится список тестов, в которые я ввел /etc/environment
:
control="hello"
test0="#hello"
test1="h\\#ello"
test2="h\#ello"
test3="h//#ello"
test4="h/#ello"
test5=h#ello
test6=h\\#ello
test7=h\#ello
test8=h//#ello
test9=h/#ello
test10='h#ello'
test11='h\\#ello'
test12='h\#ello'
test13='h//#ello'
test14='h/#ello'
Если я выйду из системы, а затем снова войду в систему, он правильно проанализирует / etc / environment. Условие управления переходит echo $control
. Однако ни один из тестовых примеров не отвечает правильно. В каждом случае строка после решетки (#) либо перехватывается, либо игнорируется. Например, echo $test5
производит h
. Есть ли лучший способ уйти от #
?
Интересно, если я выполню source /etc/environment
тогда все работает, как ожидалось, и на самом деле оба echo $control
и echo $test
дают желаемый результат. Но после выхода из системы / входа в систему проблема возвращается ...
Что ж, это непростая вещь, которую вы хотите сделать / etc / environment - это не синтаксис оболочки, он выглядит так, но это не так, что разочаровывает людей. Идея / etc / environment была замечательной. Независимый от оболочки способ установки переменных! Ура! Но практические ограничения делают его бесполезным.
Вы не можете передавать туда переменные. Попробуйте, например, поместить в него MAIL = $ HOME / Maildir / и посмотреть, что произойдет. Увы, лучше просто перестать пытаться использовать его для каких-либо целей. Таким образом, вы не можете делать с ним то, что ожидали бы, если бы он был обработан оболочкой.
Используйте / etc / profile или / etc / bashrc.