Почему переменные не такие, как $ PS1 в printenv?

Из того, что я могу сказать, printenv отображает переменные среды, но почему бы мне не увидеть другие переменные, такие как PS1 для настройки приглашения оболочки?

Что именно выводит printenv и почему не поднимает ли он PS1? Есть ли более полная команда вывода, которая делает больше, чем printenv?

6
задан 8 December 2017 в 13:08

3 ответа

Это потому, что PS1 обычно не экспортируется.

Среда переменных используется для установки среды выполнения дочерних процессов; поскольку PS1 действительно имеет значение только в интерактивной оболочке, обычно нет какой-либо точки, экспортирующей ее - это просто простая переменная оболочки.

Если вы запускаете интерактивную дочернюю переменную shell [!d2 ], тогда он будет читать и устанавливать его PS1 из файла ресурсов оболочки, например ~/.bashrc

. Если вы export PS1, вы увидите его на выходе printenv. В качестве альтернативы вы можете увидеть простые переменные оболочки, используя bash builtin set, как описано здесь. Как перечислить все имена переменных и их текущие значения?

5
ответ дан 22 May 2018 в 18:00
  • 1
    Я не уверен, что понимаю всю терминологию, используемую в этом ответе. Что означает, что переменная среды должна быть «экспортирована»? Обычно, когда я вижу учебники о сохранении, например. форматирование оболочки, вы экспортируете PS1 = " в файле .bash_profile, например. Делает ли экспорт только среднее значение «сохранено / сохранено в терминальных сеансах» ?? – Aruka J 29 September 2017 в 18:41
  • 2
    @ArukaJ переменная оболочки - это всего лишь переменная оболочки, пока она не экспортируется - только тогда она станет переменной окружения. Экспорт просто делает его доступным для дочерних процессов текущей оболочки (т. Е. Становится частью их среды ) - не имеет ничего общего с постоянством в разных сеансах терминала. – steeldriver 29 September 2017 в 18:52
  • 3
    Точно ли можно сказать, что PS1 на самом деле не является переменной окружения, а скорее переменной оболочки, по крайней мере, пока я не решит экспортировать ее в мой профиль bash? – Aruka J 29 September 2017 в 19:02
  • 4
    Также, что конкретно подразумевается под «дочерним процессом текущей оболочки», – Aruka J 29 September 2017 в 19:03
  • 5
    Как я могу запустить интерактивную дочернюю оболочку ?? – WEFX 16 May 2018 в 19:39

Это потому, что PS1 обычно не экспортируется.

Среда переменных используется для установки среды выполнения дочерних процессов; поскольку PS1 действительно имеет значение только в интерактивной оболочке, обычно нет какой-либо точки, экспортирующей ее - это просто простая переменная оболочки.

Если вы запускаете интерактивную дочернюю переменную shell , тогда он будет читать и устанавливать его PS1 из файла ресурсов оболочки, например ~/.bashrc

. Если вы export PS1, вы увидите его на выходе printenv. В качестве альтернативы вы можете увидеть простые переменные оболочки, используя bash builtin set, как описано здесь. Как перечислить все имена переменных и их текущие значения?

5
ответ дан 18 July 2018 в 06:01

Это потому, что PS1 обычно не экспортируется.

Среда переменных используется для установки среды выполнения дочерних процессов; поскольку PS1 действительно имеет значение только в интерактивной оболочке, обычно нет какой-либо точки, экспортирующей ее - это просто простая переменная оболочки.

Если вы запускаете интерактивную дочернюю переменную shell , тогда он будет читать и устанавливать его PS1 из файла ресурсов оболочки, например ~/.bashrc

. Если вы export PS1, вы увидите его на выходе printenv. В качестве альтернативы вы можете увидеть простые переменные оболочки, используя bash builtin set, как описано здесь. Как перечислить все имена переменных и их текущие значения?

5
ответ дан 24 July 2018 в 18:30

Другие вопросы по тегам:

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