Я новичок в программировании на Bash и работаю над созданием настраиваемой командной строки Bash .Моя цель - создать приглашение, в котором будут отображаться только имя входа и имя хоста, если они отличаются от тех, которые я обычно использую.Я также хочу добавить текущую ветку Git в командную строку, когда в каталоге, который находится под контролем версии Git.
Я хотел бы покрасить раздел логина и имени хоста в зеленый, путь к каталогу синий,раздел ветки Git розовый, а разделители (: и символы $) белые.Однако, , когда ранее выполненная команда возвращает что-либо кроме нуля, я хотел бы покрасить $ separator красным .Общий формат без цветов выглядит следующим образом:
loginname@hostname:~/current/path:branchname$
Обязательными являются только разделы: путь к каталогу и символ $.Вот код, который я написал для моего .bashrc файла:
MYNAME="gwen"
MYHOST="gwen-laptop"
RED="\[\033[31m\]"
WHITE="\[\033[0m\]"
GREEN="\[\033[01;32m\]"
BLUE="\[\033[01;34m\]"
PINK="\[\033[01;35m\]"
DOLLAR="if [ \$? = 0 ]; then echo ${WHITE}\$; else echo ${RED}\$${NORMAL}; fi"
GITBRN='$(__git_ps1 "\033[0m:\033[01;35m%s")'
USERNM="if [ \u != ${MYNAME} ]; then whoami; fi;"
HOSTNM="if [ \h != ${MYHOST} ]; then echo -n @; hostname; fi;"
COLONM="if [ \u != ${MYNAME} ] || [ \h != ${MYHOST} ]; then echo -n :; fi;"
PS1="${GREEN}\`${USERNM}\`\`${HOSTNM}\`${WHITE}\`${COLONM}\`${BLUE}\w${GITBRN}\`${DOLLAR}\` "
Этот код отвечает всем моим требованиям, за исключением того, что он всегда оставляет символ $ белыми не окрашивает его в красный цвет в соответствующее время .(Я подозреваю, что проблема в том, что «\ $?» В DOLLAR ссылается на ранее выполненную команду, но DOLLAR выполняется последним при построении PS1, поэтому ранее выполненный оператор больше не является командой, которая была запущена до начала строительства PS1; это что-токоторый был выполнен для создания командной строки.) Я не уверен, как решить эту проблему .
Этот код уродлив, и нуждается в рефакторинге ,Я пытался переместить все цветовые коды в их собственные переменные, но когда я использовал эти цветовые переменные в коде для GITBRN, все пошло наперекосяк, поэтому я вместо этого использовал там буквальные цвета.
Я потратил целый день на то, чтобы заставить этот код работать, и я думаю, что сейчас я никуда не пойду.Любые предложения о том, как сделать так, чтобы этот знак доллара окрашивался красным в подходящее время, были бы наиболее признательны .Я также открыт для предложения по рефакторингу кода, чтобы сделать его более понятным и читаемым.
PS Я пользователь Ubuntu Linux (Lucid Lynx).