Это часть моего файла ~/.bashrc:
prompt(){
local EXIT="$?" # return code
PS1=""
local red="\[\033[0;31m\]" # text colour
local purple="\[\033[0;35m\]" # text colour
local normal="\[\033[0m\]" # text colour
if [ $EXIT == 0 ]; then # $EXIT colour based upon its value
local return="${normal}${?}"
else
local return="${red}${?}${normal}"
fi
PS1+="${normal}[${purple}\\D{%-l:%M%P}${normal}]${return} \\[\\e]0; \
\\u@\\h: \\w\\a\\]${debian_chroot:+($debian_chroot)}\\u@\\h:\\w\\$ "
}
export PROMPT_COMMAND=prompt
Это моя командная оболочка в gnome-терминале (отображается правильно):
[5:01pm]0 user@host:~$
Но когда я переключаюсь на консоль tty, после того, как я вошел в систему, это отображается:
[5:05pm]0 ;user@host: ~user@host:~$
Это происходит с обычным пользователем, а также с root на том же ноутбуке в той же операционной системе. Цвета всегда отображаются корректно, проблема только в том, как отображается подсказка.
Версии ПО:
- GNU bash, версия 4.3.11(1)-выпуск (i686-pc-linux-gnu),
- Убунту Гном 14.04.
Некоторое объяснение значения PS1:
[5:01pm] # current time
0 # return/exit code of the last command (0 can be any number;
# if return code has a non-zero value, it turns red)
PS — В настоящее время в tty-консолях мне нужно source ~/.bashrc
, чтобы иметь возможность использовать все мои настройки. (1) Где находится собственный .bashrc консоли tty? (2) Или как настроить его на использование ~/.bashrc
?
Решение различного поведения приглашения
Как следует из принятого ответа, в переменной PS1 была часть, которую следует опустить, поэтому я просто изменил последнюю строку функции на
PS1+="${normal}[${purple}\\D{%-l:%M%P}${normal}]${return} \
${debian_chroot:+($debian_chroot)}\\u@\\h:\\w\\$ "
Решение Post Scriptum (PS)
консоли tty используют ~/.bashrc_profile
вместо ~/.bashrc
, потому что (как сказал @chepner в комментарии ниже) последний исходит от эмулятора терминала с графическим интерфейсом (поскольку он обычно запускает интерактивную оболочку без входа в систему). tty console — это интерактивная оболочка.
Мое решение состоит в том, чтобы добавить следующее к ~/.bash_profile
:
. ~/.bashrc
.bashrc
зависит от пользователя, входящего в систему, а не от типа терминала. - person chepner   schedule 05.05.2015~/.bashrc
, сначала мне нужно для ввода командыsource ~/.bashrc
. - person tukusejssirs   schedule 05.05.2015login
запускает оболочку входа в систему, источником которой является.bash_profile
, а не.bashrc
. Эмулятор терминала с графическим интерфейсом обычно запускает интерактивную оболочку без входа в систему, источник которой.bashrc
, а не.bash_profile
, поскольку ваш графический интерфейс предположительно был запущен из оболочки входа в систему. Довольно распространенной практикой является включениеsource ~/.bashrc
из.bash_profile
, так что.bashrc
используется для всех интерактивных оболочек, независимо от того, являются ли они оболочками для входа в систему. - person chepner   schedule 05.05.2015