Bash prompt menjalankan perintah setiap kali prompt baru ditampilkan


11

Saya memiliki prompt berikut dalam bash yang menunjukkan cabang git saat ini:

PS1+="$(git_prompt)" #git_prompt is a function in my .bashrc

yang bekerja ketika saya sumber. Bashrc, tetapi tidak ketika saya mengubah cabang, sehingga PS1 var hanya dievaluasi ketika saya sumber. Bashrc, tetapi harus dievaluasi setiap kali prompt baru ditampilkan. Bagaimana ini bisa dilakukan dengan bash 4.3?

Jawaban:


14

Masalah Anda adalah bahwa $(git_prompt)dievaluasi ke beberapa string konstan sebelum ditambahkan $PS1. Anda harus menambahkan kode sebagai gantinya:

PS1+='$(git_prompt)'

2
ini memberikan kesalahan bash: command substitution: line 1: syntax error near unexpected token ) 'bash: substitusi perintah: baris 1:git_prompt)'
danielr1996

1
Itu sangat aneh. Buat "cadangan" ( oldPS1="$PS1") dan kemudian coba:PS1='$(git_prompt) '
Hauke ​​Laging

9

Saya memperbaikinya sekarang dengan menggunakan ini sebagai prompt

PS1="$green\u $r@ $red\h $r: $yellow\W \!$r \$(git_prompt) \n$yellow\$ $r"

sebelum saya menggabungkan beberapa string ke satu string PS1, sepertinya ada masalah. Triknya adalah menulis \sebelum mengecualikan perintah $(git_prompt).

Jadi $(git_prompt)akan dievaluasi ketika .bashrcdievaluasi dan

\$(git_prompt) akan dievaluasi setiap kali prompt baru ditampilkan


5
Untuk siapa pun yang menemukan ini di masa depan: Perhatikan tanda kutip ganda di "sekitar string. Menggunakan \$(git_prompt)tanpa itu tidak akan berhasil.
dthor

1

coba kutipan tunggal di ps1 Anda

PS1+='$(git_prompt)'

saya juga menyarankan fungsi psOne saya

psOne () 
{ 
    ps1tm=${1:-01};
    ps1tc=(30 31 32 33 34 35 36 37 38);
    PS1='${debian_chroot:+($debian_chroot)}\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\]\u\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\]@\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\]\h\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\] :\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\] \w\[\033[${ps1tm};${ps1tc[$((RANDOM%${#ps1tc[@]}))]}m\] \$ '
}

masukkan deskripsi gambar di sini


Ini terlihat menarik, dapatkah Anda menjelaskan untuk apa ps1tm?
danielr1996

@ danielr1996 sebagai mode teks (bold unbold blink underline {0..5}, dalam fungsi ini diatur ke 01 jika tidak ada argumen
Jonah

0

Ingin melihat kegilaan? Ini adalah cara saya membangun bash prompt saya:

# inspiration: http://www.stumbleupon.com/su/2LpQMi 
user_host_path="${debian_chroot:+($debian_chroot) }"'\u@\h:\w'
xterm_title='\[\e]0;'"$user_host_path"'\a\]'
[[ $TERM == xterm* || $TERM == rxvt* ]] && line1="${xterm_title}"
git_branch='$(git_current_branch " (%s)")'
line1="${line1}${user_host_path}${git_branch} "
line2='\$ '
print_time='{ printf "%*s" $(($(tput cols) - 10)) " "|sed -e "s/./˙/g" -re "s/.{6}(..)$/ bash \1/"; date "+ %T"; } >&2'
color_bold='\[\e[0;1m\]'
color_reset='\[\e[0m\]'
PROMPT_COMMAND="_rc_=\$?;${print_time};((_rc_!=0)) && PS1='${line1}\n${color_bold}[\$_rc_]${color_reset} ${line2}' || PS1='${line1}\n${line2}'"
unset user_host_path xterm_title color_bold color_reset line1 line2 print_time git_branch

Saya bukan penggemar warna.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.