Метка сброса (#) в / etc / environment

17

Я добавляю переменную env, /etc/environmentно поскольку значение переменной содержит знак #, строка является полосатой.

MYSQL_PWD="something#no"

Теперь, если я делаю envвыше, код дает MYSQL_PWD=something. Как я могу избежать хеша? Я уже попробовал \характер.

Умайр А.
источник
Вы уверены, что публикуете то же самое, что и вы /etc/environment? Потому что я не мог продублировать это поведение на Debian Wheezy.
Джозеф Р.
Извините, экспорта нет. Обновил мой вопрос.
Умайр А.
На данный момент я изменил MySQL pwd :(
Umair A.
Мне удалось продублировать ваше поведение. Я не осознавал, что мне нужно было выйти из системы, чтобы вернуться к чтению оболочки /etc/environment.
Джозеф Р.
@JosephR. - Я продублировал это и тоже удивился. Рассматривая роль этого файла, он, кажется, согласуется с его целью.
slm

Ответы:

18

Это кажется невозможным с /etc/environment. Это общее место для переменных, которые не зависят от оболочки. Учитывая это, он не выглядит так, как будто он поддерживает строки с хэш-метками ( #), и, похоже, нет способа избежать их.

Я нашел этот SF Q & A под названием: Как правильно избежать лидирующего символа «#» в linux и т.д. / среде? , Ни один из этих методов не сработал:

  • Контроль = «Привет»
  • test0 = "# привет"
  • test1 = "ч \ #ello"
  • test2 = "ч # ELLO"
  • test3 = "ч // # ELLO"
  • test4 = "ч / # ELLO"
  • test5 = ч # ELLO
  • test6 = ч \ #ello
  • test7 = ч # ELLO
  • test8 = Л // # ELLO
  • test9 = ч / # ELLO
  • test10 = 'ч # ELLO'
  • test11 = 'ч \ #ello'
  • test12 = 'ч # ELLO'
  • test13 = 'ч // # ELLO'
  • test14 = 'ч / # ELLO'

Принятый ответ на этот вопрос и что также будет моим советом:

Ну, это сложная вещь, которую вы хотите сделать, /etc/environmentэто не синтаксис оболочки, это похоже на один, но это не так, что расстраивает людей. Идея /etc/environmentбыла замечательной. Независимый от оболочки способ установки переменных! Ура! Но практические ограничения делают его бесполезным.

Вы не можете передавать переменные там. Попробуйте например положить MAIL=$HOME/Maildir/в него и посмотреть что получится. Лучше просто прекратить попытки использовать его для каких-либо целей, увы. Таким образом, вы не можете делать с ним такие вещи, которые вы могли бы ожидать, если бы они были обработаны оболочкой.

Используйте /etc/profileили /etc/bashrc.

Еще один вопрос и ответ дал разумное объяснение, почему это так:

Нет способа /etc/environmentизбежать # (так как он рассматривается как комментарий), так как он анализируется модулем PAM "pam_env", и он обрабатывает его как простой список пар KEY = VAL и соответствующим образом настраивает среду. Это не bash / shell, синтаксический анализатор не имеет языка для расширения переменных или экранирования символов.

Ссылки

SLM
источник
это ошибка или есть какая-то причина?
Умайр А.
1
@UmairAshraf - не ошибка, просто ограниченная функциональность, учитывая роль этого файла. Этот файл охватывает несколько технологий оболочки, поэтому он должен содержать функции, которые поддерживаются во всех оболочках, в которых он будет использоваться.
slm
какой идиотский; это должно было просто использовать тот же формат, что и /proc/environ.
Каз
1

Возможно, слишком поздно, но три обратные косые черты раньше #работали на меня.

Если пароль, скажем, «admin # 123», вы можете определить его как

admin\\\#123
Сай Шиварам
источник
Это не работает для меня в /etc/environmentфайле.
Джои В.