Почему следующие два способа отображения переменных среды текущая оболочка отличается?

Подсказку можно найти в символах в правом верхнем углу, которые находятся в конце строк. Консоль Linux имеет частичную поддержку экранов рисования линий VT100 (включение/выключение).Если ваша локаль не установлена ​​должным образом (заставляя vim путаться в том, какие байты содержат допустимые символы), и, например, если вы отправили какой-то двоичный файл на терминал (и оставили его в режиме набора альтернативных символов...), у вас может быть такое странное поведение.

Предполагая, что переменная среды терминала установлена ​​правильно, например,

export TERM=linux

команда reset должна решить проблему альтернативного набора символов (но не поможет с локалью или фактической кодировкой терминала).

0
23.05.2017, 09:52
3 ответа

Какую бы проблему вы ни пытались решить, вы можете попробовать, если

/proc/self

решит ее. Вместо того, чтобы получать начальную среду оболочки,

cat /proc/self/environ

отображает среду команды cat, которая должна быть равна текущей среде оболочки, в которой она выполняется.

1
28.01.2020, 02:13

Вы должны прочитать комментарии под вводящим в заблуждение ответом.

/proc/$PID/environ не используется оболочкой. Он просто представляет начальную среду процесса при его запуске.

Все, что делается в оболочке, включая сценарии инициализации, может изменять эти значения внутри оболочки без изменения записи proc, на которую вы смотрите.

6
28.01.2020, 02:13

/proc/7791/environ показывает исходную среду оболочки, как она была получена процессом при его запуске с помощью системного вызова execve:

 int execve(const char *filename, char *const argv[], char *const envp[]);

Когда оболочка работает, он может изменить свой набор экспортируемых переменных, например, вычислив .bashrc. Затем этот новый набор передается в векторе envp при запуске программы env.

5
28.01.2020, 02:13

Теги

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