Терминал, Подсказка изменена на «-Bash-4.2» и цвета потеряны

9

Обычно моя терминальная подсказка была

username place$

теперь это только показывает

bash-4.2$

и все настройки цвета были потеряны (на профиле терминала у меня та же цветовая схема, но она просто не показывает цвета)

Я понятия не имею, что происходит (и я не знаю, как это искать).

Это ничего не меняет, я работал с Eclipse и Maven, открыл новый терминал, и у нового терминала не было цветов.

Примечание: у меня нет файла ~ / .bashrc, но у меня есть ~ / .bash_profile.

lcjury
источник
Подсказка задается переменной PS1, здесь вы можете узнать больше об этом, также есть различные примеры цветных подсказок
RSFalcon7
Это происходит 1) Только когда вы входите в систему на консоли, 2) Только когда вы открываете новый терминал с графическим интерфейсом, 3) И 1, и 2? Если вы не уверены в # 1, переключитесь на VT и войдите в систему или попробуйте bash -l.
Златовласка
@ TAFKA'goldilocks 'и то и другое, если я использую bash -l, цвета возвращаются, но подсказка остается на уровне "bash-4.2 $"
lcjury
Если мой ответ не работает, опубликуйте вывод echo $PS1в версии для входа в систему с цветами.
Златовласка

Ответы:

10

$PS1Вероятно, переменная подсказки не была задана, поэтому используется встроенное значение по умолчанию \s-\v\$.

Когда bash запускается в интерактивном режиме, он получает файл конфигурации, как правило, либо, ~/.bashrcлибо ~/.bash_profile, предполагая, что они существуют, и именно так устанавливается более интересное приглашение. От man bash:

ВЫЗОВ

[...] Когда bash вызывается как интерактивная оболочка входа в систему или как неинтерактивная оболочка с параметром --login, она сначала читает и выполняет команды из файла / etc / profile, если этот файл существует. После прочтения этого файла он ищет ~ / .bash_profile, ~ / .bash_login и ~ / .profile в указанном порядке [...]

[...] Когда запускается интерактивная оболочка, которая не является оболочкой входа в систему, bash читает и выполняет команды из ~ / .bashrc, если этот файл существует.

Тогда отсутствие вашего приглашения может происходить в двух разных контекстах: в оболочках входа в систему и в оболочках входа в систему. Если вы используете диспетчер отображения для входа непосредственно в графический интерфейс, вы не увидите оболочек входа в систему, если не переключитесь на виртуальную консоль (например, с помощью CtrlAlt+ F1 до F6). Тем не менее, вы можете проверить свой Баш профиль входа в систему в графическом интерфейсе, открыв новую оболочку входа в явном виде: bash -l.

Проблема возникает с не входящими в систему оболочками

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

  • Если ~/.bashrcне существует, должен быть /etc/skel/.bashrcиспользован для его создания для новых пользователей. Просто скопируйте этот файл в свой домашний каталог, и ваше приглашение по умолчанию должно вернуться для следующей новой оболочки, которую вы откроете.

  • Если ~/.bashrcсуществует, проверьте, есть ли где-нибудь строка с источниками /etc/bashrc:

    . /etc/bashrc
      -OR-
    source /etc/bashrc

    Если нет, проверьте, существует ли этот файл (он должен, по крайней мере, в большинстве дистрибутивов Linux), и добавьте такую ​​строку в свой ~/.bashrc.

Проблема возникает с логином оболочки

Если проблема возникает с оболочками входа в систему, а также без входа в систему, проблема, вероятно, та же, что и выше. Если это происходит только с оболочками входа в систему, у вас либо нет одного из файлов, указанных для оболочек входа в систему в приведенной выше цитате INVOCATION, либо они не содержат ваш источник ~/.bashrc, что является нормальным для большинства дистрибутивов Linux. Если ни один из этих файлов не существует, создайте ~/.bash_profileв нем следующее:

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi

Это позволяет вам, по большей части, хранить вашу конфигурацию в одном файле ( ~/.bashrc).


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

if [ "$PS1 ]; then
    PS1= .... # see below
fi

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

Страница man bash содержит раздел PROMPTING, который описывает, как установить приглашение с такими динамическими функциями, как ваше имя пользователя и текущий рабочий каталог, например:

PS1="\u \w:"

Здесь есть руководство по использованию цвета . Обратите внимание на то , что вы должны окружать не напечатанные символы \[и \](есть обсуждение этого в конце ответа о цветах).

лютик золотистый
источник
Спасибо TAFKA !, больше, чем просто ответ, я узнал что-то новое :)!
lcjury
1

Просто вставьте это в ~ / .bashrc и ~ / .bash_profile от имени пользователя root.

# Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi

Азиз Зоаиб
источник
0

Пришлось обновить Cygwin Bash по соображениям безопасности.

старый bash = 4.1.10 (4) -релиз (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) -релиз (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

Рэнди Сп
источник