PROMPT_COMMAND dapat berisi pernyataan bash biasa sedangkan variabel PS1 juga dapat berisi karakter khusus, seperti '\ h' untuk nama host, dalam variabel.
Misalnya di sini adalah prompt bash saya yang menggunakan PROMPT_COMMAND dan PS1. Kode bash di PROMPT_COMMAND menentukan cabang git apa yang mungkin Anda masuki dan menampilkannya pada prompt, bersama dengan status keluar dari proses yang terakhir dijalankan, nama host dan nama dasar pwd. Variabel RET menyimpan nilai kembali dari program yang terakhir dieksekusi. Ini memudahkan untuk melihat apakah ada kesalahan dan kode kesalahan dari program terakhir yang saya jalankan di terminal. Perhatikan bagian luar 'yang mengelilingi seluruh ekspresi PROMPT_COMMAND. Ini menyertakan PS1 sehingga variabel ini dievaluasi ulang setiap kali variabel PROMPT_COMMAND dievaluasi.
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";'
Contoh keluarannya terlihat seperti ini di direktori non-git:
sashan@dhcp-au-122 Documents $ false
sashan@dhcp-au-122 Documents 1 $
dan di direktori git Anda melihat nama cabang:
sashan@dhcp-au-122 rework mybranch $
Memperbarui
Setelah membaca komentar dan jawaban Bob saya rasa menulis seperti yang dia gambarkan lebih baik. Ini lebih bisa dipelihara daripada yang saya tulis di atas, di mana variabel PS1 diatur di dalam PROMPT_COMMAND, yang dengan sendirinya merupakan string super rumit yang dievaluasi saat runtime oleh bash. Itu berhasil, tetapi itu lebih rumit dari yang seharusnya. Agar adil saya menulis bahwa PROMPT_COMMAND untuk diri saya sendiri sekitar 10 tahun yang lalu dan itu berhasil dan tidak terlalu memikirkannya.
Bagi mereka yang penasaran tentang bagaimana saya mengubah barang-barang saya, pada dasarnya saya meletakkan kode untuk PROMPT_COMMAND di file terpisah (seperti yang dijelaskan Bob) dan kemudian menggemakan string yang saya maksudkan menjadi PS1:
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"
dan di .bashrc saya
function prompt_command {
RET=$?
export PS1=$(~/.bash_prompt_command $RET)
}
PROMPT_DIRTRIM=3
export PROMPT_COMMAND=prompt_command
if git branch &>/dev/null ; then\
. Ini mengalihkan stdout dan stderr ke / dev / null. tldp.org/LDP/abs/html/io-redirection.html