PROMPT_COMMAND sıradan bash deyimleri içerebilirken, PS1 değişkeni değişkende ana bilgisayar adı için '\ h' gibi özel karakterler de içerebilir.
Örneğin burada hem PROMPT_COMMAND hem de PS1 kullanan bash istemim var. PROMPT_COMMAND'deki bash kodu, hangi git dalında olabileceğinizi belirler ve bunu, son çalıştırma işleminin çıkış durumu, pwd'nin ana bilgisayar adı ve temel adı ile birlikte gösterir. RET değişkeni, son yürütülen programın dönüş değerini saklar. Bu, bir hata olup olmadığını ve terminalde çalıştırdığım son programın hata kodunu görmek için kullanışlıdır. Tüm PROMPT_COMMAND ifadesini çevreleyen dış 'a dikkat edin. PROMPT_COMMAND değişkeni her değerlendirildiğinde bu değişkenin yeniden değerlendirilmesi için PS1'i içerir.
PROMPT_COMMAND='RET=$?;\
BRANCH="";\
ERRMSG="";\
if [[ $RET != 0 ]]; then\
ERRMSG=" $RET";\
fi;\
if git branch &>/dev/null; then\
BRANCH=$(git branch 2>/dev/null | grep \* | cut -d " " -f 2);\
fi;
PS1="$GREEN\u@\h $BLUE\W $CYAN$BRANCH$RED$ERRMSG \$ $LIGHT_GRAY";'
Örnek çıktı git olmayan bir dizinde şöyle görünür:
sashan@dhcp-au-122 Documents $ false
sashan@dhcp-au-122 Documents 1 $
ve bir git dizininde şube adını görürsünüz:
sashan@dhcp-au-122 rework mybranch $
Güncelleme
Yorumları ve Bob'un cevabını okuduktan sonra, onu anlattığı gibi yazmanın daha iyi olacağını düşünüyorum. Yukarıda yazdığımdan daha sürdürülebilir, burada PS1 değişkeni PROMPT_COMMAND içinde ayarlanmıştır, bu da çalışma zamanında bash tarafından değerlendirilen süper karmaşık bir dizedir. İşe yarıyor, ama olması gerekenden daha karmaşık. Adil olmak gerekirse, PROMPT_COMMAND'i yaklaşık 10 yıl önce kendim için yazdım ve işe yaradı ve bunun hakkında çok fazla düşünmedi.
Eşyalarımı nasıl değiştirdiğimi merak edenler için, temel olarak PROMPT_COMMAND kodunu ayrı bir dosyaya (Bob'un tarif ettiği gibi) koydum ve ardından PS1 olmasını istediğim dizeyi tekrarladım:
GREEN="\[\033[0;32m\]"
CYAN="\[\033[0;36m\]"
RED="\[\033[0;31m\]"
PURPLE="\[\033[0;35m\]"
BROWN="\[\033[0;33m\]"
LIGHT_GRAY="\[\033[0;37m\]"
LIGHT_BLUE="\[\033[1;34m\]"
LIGHT_GREEN="\[\033[1;32m\]"
LIGHT_CYAN="\[\033[1;36m\]"
LIGHT_RED="\[\033[1;31m\]"
LIGHT_PURPLE="\[\033[1;35m\]"
YELLOW="\[\033[1;33m\]"
WHITE="\[\033[1;37m\]"
RESTORE="\[\033[0m\]" #0m restores to the terminal's default colour
if [ -z $SCHROOT_CHROOT_NAME ]; then
SCHROOT_CHROOT_NAME=" "
fi
BRANCH=""
ERRMSG=""
RET=$1
if [[ $RET != 0 ]]; then
ERRMSG=" $RET"
fi
if which git &>/dev/null; then
BRANCH=$(git branch 2>/dev/null | grep \* | cut -d " " -f 2)
else
BRANCH="(git not installed)"
fi
echo "${GREEN}\u@\h${SCHROOT_CHROOT_NAME}${BLUE}\w \
${CYAN}${BRANCH}${RED}${ERRMSG} \$ $RESTORE"
ve .bashrc dosyamda
function prompt_command {
RET=$?
export PS1=$(~/.bash_prompt_command $RET)
}
PROMPT_DIRTRIM=3
export PROMPT_COMMAND=prompt_command
if git branch &>/dev/null ; then\
. Hem stdout hem de stderr'i / dev / null'a yönlendirir. tldp.org/LDP/abs/html/io-redirection.html