- Вопрос или проблема
- Проблема возникает с не оболочками входа
- Проблема возникает с оболочками входа
- Ответ или решение
- Проблема с терминалом: пропажей цветной подсветки и изменением подсказки до "-Bash-4.2"
- Причины возникновения проблемы
- Решения проблемы
- 1. Проверка существования файла .bashrc
- 2. Настройка файла .bashrc
- 3. Обновление файла .bash_profile
- Заключение
Вопрос или проблема
Обычно мой терминальный промпт был таким
username place$
сейчас он показывает только
bash-4.2$
и все настройки цвета были сброшены (в профиле терминала у меня такая же цветовая схема, но цвета просто не отображаются)
У меня нет никаких идей, что происходит (и я не знаю, как это искать).
Это изменилось ни с того, ни с сего, я работал с eclipse и maven, открыл новый терминал, и в новом терминале не было цветов.
Примечание: у меня нет файла ~/.bashrc, но у меня есть файл ~/.bash_profile.
Переменная промпта $PS1
вероятно не установлена, поэтому используется встроенное значение по умолчанию \s-\v\$
.
Когда bash запускается интерактивно, он загружает файл конфигурации, обычно это ~/.bashrc
или ~/.bash_profile
, если они существуют, и именно так устанавливается более сложный промпт. Из man bash
:
ВЫЗОВ
[…]
Когда bash вызывается как интерактивная оболочка входа или как
неинтерактивная оболочка с опцией –login,
сначала читаются и выполняются команды из файла /etc/profile, если этот файл существует. После
чтения этого файла он ищет ~/.bash_profile, ~/.bash_login, и
~/.profile, в указанном порядке […][…] Когда запускается интерактивная оболочка, которая не является оболочкой входа, bash читает и выполняет команды из
~/.bashrc, если этот файл существует.
Не установленный промпт может возникать в двух различных контекстах: оболочки входа и не оболочки входа. Если вы используете дисплейный менеджер для прямого входа в GUI, вы не столкнетесь с оболочками входа, если не переключитесь на виртуальную консоль (например, CtrlAlt + F1 до F6). Однако вы можете протестировать свой профиль входа bash в GUI, открыв новую оболочку входа явно: bash -l
.
Проблема возникает с не оболочками входа
Если проблема возникает, например, с обычными терминалами GUI, тогда либо ваш ~/.bashrc
отсутствует, либо его редактировали, исключив загрузку глобального файла, вероятно /etc/bashrc
.
-
Если
~/.bashrc
не существует, должен быть файл/etc/skel/.bashrc
, который используется для его создания для новых пользователей. Просто скопируйте этот файл в свою домашнюю директорию, и ваш стандартный промпт должен вернуться для следующей новой оболочки, которую вы откроете. -
Если
~/.bashrc
существует, проверьте, есть ли где-то строка, которая загружает/etc/bashrc
:. /etc/bashrc -ИЛИ- source /etc/bashrc
Если нет, проверьте, существует ли этот файл (он должен существовать, по крайней мере, в большинстве дистрибутивов linux) и добавьте такую строку в
~/.bashrc
.
Проблема возникает с оболочками входа
Если проблема возникает как с оболочками входа, так и с не оболочками входа, то проблема, вероятно, та же, что и выше. Если она возникает только с оболочками входа, у вас либо отсутствует один из файлов, упомянутых для оболочек входа в цитате INVOCATION выше, либо они не загружают ваш ~/.bashrc
, что нормально для большинства дистрибутивов linux. Если ни один из этих файлов не существует, создайте ~/.bash_profile
с таким содержанием:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
Это позволяет вам, в большинстве случаев, сохранить вашу конфигурацию в одном файле (~/.bashrc
).
Если, что бы вы ни делали, вы не можете вернуть промпт, вы можете создать его и вставить в ~/.bashrc
следующим образом:
if [ "$PS1 ]; then
PS1= .... # см. ниже
fi
Это потому, что $PS1 установлен и имеет значение по умолчанию для интерактивных оболочек, и вы не хотите устанавливать его иначе, так как другие вещи могут использовать это значение для определения, является ли это интерактивной средой.
Страница man bash содержит раздел PROMPTING, который описывает, как установить промпт с динамическими функциями, такими как ваше имя пользователя и текущий рабочий каталог, который будет, например:
PS1="\u \w:"
Есть руководство по использованию цветов здесь. Обратите внимание на то, что вы должны заключать непринтящиеся символы в \[
и \]
(об этом есть обсуждение в конце ответа по цветам).
Просто вставьте это в ~/.bashrc и ~/.bash_profile от имени root для затронутого пользователя.
# Загружать глобальные определения
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
Пришлось обновить bash в Cygwin по соображениям безопасности.
старый bash = 4.1.10(4)-release (i686-pc-cygwin) около 2009 года
$ echo $PS1
\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$
новый bash = 4.4.12(3)-release (i686-pc-cygwin) около 2016 года
Чтобы получить точно такой же вид и ощущения, пришлось добавить в .bashrc
:
#
GREEN="\[$(tput setaf 2)\]"
YELLOW="\[$(tput setaf 3)\]"
RESET="\[$(tput sgr0)\]"
PS1="\n${GREEN}\u@\h ${YELLOW}\w${RESET}\n$ "
cd $HOME
#
примечание: включая cd $HOME
Я столкнулся с такой же проблемой, когда наш DBA пытался создать пользователя oracle для установки БД. Вместо того, чтобы изменять записи, он удалил некоторые файлы профиля, необходимые для пользователя.
Я разрешил эту проблему, скопировав следующие файлы по умолчанию от другого пользователя, который не сталкивался с этой проблемой:
/home/username/.bashrc
/home/username/.bashrc_profile
/home/username/.bashrc_logout
/home/username/.bashrc_history
Нет необходимости менять какие-либо настройки/текст в этих файлах.
Выйдите из сеанса и войдите обратно. У вас должен восстановиться стандартный шелл (обычно bash) с цветами и промптом входа.
чтобы исправить, выполните следующее (если у пользователя есть sudo, выполните с ним, если нет, войдите под одним из sudo)
cd /etc/skel/
скопируйте ниже
scp .bash_profile .bashrc в домашнюю директорию пользователя
Ответ или решение
Проблема с терминалом: пропажей цветной подсветки и изменением подсказки до "-Bash-4.2"
При работе в терминале вы заметили, что ваша стандартная подсказка изменилась с
username place$
на
bash-4.2$
и, кроме того, отсутствуют цветовые настройки. Данная проблема может возникнуть в результате нескольких причин, связанных с конфигурацией среды Bash.
Причины возникновения проблемы
-
Отсутствие файла конфигурации:
По умолчанию Bash выполняет файл конфигурации при запуске. Для интерактивных оболочек, не являющихся оболочками входа, загружается~/.bashrc
. Если этого файла нет, то используется предустановленная подсказка. -
Неверная настройка переменной PS1:
ПеременнаяPS1
, отвечающая за настройку подсказки, могла быть не установлена или потеряла свои значения из-за отсутствия конфигурационного файла. -
Обновление окружения:
Если вы обновили версию Bash, как резко произошло в вашем случае (например, с 4.1 до 4.4), это может привести к изменению поведения, как, например, отсутствие цветного оформления.
Решения проблемы
1. Проверка существования файла .bashrc
Проверьте, существует ли файл ~/.bashrc
. Если его нет, вам нужно создать его, чтобы вернуть настройку подсказки и цветовую схему. Вы можете создать его следующим образом:
touch ~/.bashrc
2. Настройка файла .bashrc
Если файл ~/.bashrc
существует, убедитесь, что он содержит необходимую конфигурацию. Откройте его в текстовом редакторе и добавьте следующее:
# Обнаружение наличия файла для глобальных настроек
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Настройка цвета и подсказки
GREEN="\[$(tput setaf 2)\]"
YELLOW="\[$(tput setaf 3)\]"
RESET="\[$(tput sgr0)\]"
PS1="\n${GREEN}\u@\h ${YELLOW}\w${RESET}\n$ "
3. Обновление файла .bash_profile
Если вы используете ~/.bash_profile
вместо ~/.bashrc
, убедитесь, что он содержит команду для выполнения ~/.bashrc
при запуске терминала:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
Это обеспечит выполнение настроек из вашего .bashrc
даже в интерактивных оболочках входа.
Заключение
После внесения изменений не забудьте перезапустить терминал или выполнить source ~/.bashrc
для применения новых настроек. Если ни одно из этих решений не помогает, и проблема сохраняется, возможно, вам стоит создать временные файлы .bashrc
, .bash_profile
у других пользователей системы и скопировать их настройки.
Если у вас останутся дополнительные вопросы или потребуется дальнейшая помощь, не стесняйтесь обращаться к профессиональному сообществу или IT-экспертам.