Saya mencoba untuk memiliki bagian dari prompt saya diatur secara dinamis oleh suatu fungsi, jadi di saya .bashrc
punya:
asdf ()
{
echo -n $(pwd)
}
PS1="\u@\h:\w $(asdf)\$ "
Membuka shell memberi saya apa yang saya harapkan pada awalnya:
$ bash
darthbith@server:~/test /home/darthbith/test$
Namun, ketika saya mengubah direktori, bagian yang didefinisikan oleh fungsi tidak berubah:
darthbith@server:~/test /home/darthbith/test$ cd ~/test2
darthbith@server:~/test2 /home/darthbith/test$
Tujuan sebenarnya saya adalah menggunakan git-prompt.sh
skrip untuk menunjukkan cabang repositori git saya ketika saya berada di satu dengan warna-warna cantik dan segalanya, tetapi masalahnya adalah ia tidak pernah memperbarui nama cabang ketika saya mengubah repositori. Contoh sepele di atas adalah reproduksi paling sederhana yang bisa saya ajukan untuk pertanyaan saya.
.bashrc
Baris - baris yang saya harus mengintegrasikan skrip git-prompt:
source ~/.git-prompt.sh
PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__git_ps1)\$ "
Jawaban:
Menurut Bash prompt Howto :
sumber
Saat Anda menggunakan
$(..)
tanda kutip ganda, shell mengevaluasi substitusi perintah sebelum ditugaskanPS1
. Dengan demikian,PS1
hanya berisi output, bukan substitusi perintah itu sendiri. Sebagai gantinya, gunakan tanda kutip tunggal, atau keluar dari$
, sehingga string dilewatkan apa adanyaPS1
, dan kemudian dievaluasi saat prompt disetel:Membandingkan:
sumber