İşlevim PS1'de neden yeniden değerlendirilmiyor?


15

Ben istemi bir işlevi tarafından dinamik olarak ayarlanmış bir parçası olmaya çalışıyorum, bu yüzden benim .bashrcvar:

asdf ()
{
    echo -n $(pwd)
}
PS1="\u@\h:\w $(asdf)\$ "

Bir kabuk açmak bana ilk başta beklediğim şeyi verir:

$ bash
darthbith@server:~/test /home/darthbith/test$

Ancak, dizin değiştirdiğimde, işlev tarafından tanımlanan bölüm değişmez:

darthbith@server:~/test /home/darthbith/test$ cd ~/test2
darthbith@server:~/test2 /home/darthbith/test$

Benim asıl amacım güzel renkler ve her şeyi bir arada olduğumda git depomun dalını göstermek için git-prompt.shkomut dosyası kullanmaktır , ancak sorun, depoları değiştirdiğimde şube adını asla güncellememesidir. Yukarıdaki önemsiz örnek, sorum için gelebileceğim en basit üreme.

.bashrcBen git-istemi komut entegre zorunda hatları:

source ~/.git-prompt.sh
PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__git_ps1)\$ "

Bir yan notta, bir git istemi istiyorsanız github.com/magicmonty/bash-git-prompt/blob/master/README.md
mgor

Yanıtlar:


22

Bash istemine göre Howto :

[21:58:33][giles@nikola:~]$ PS1="[\$(date +%H%M)][\u@\h:\w]\$ "
[2159][giles@nikola:~]$ ls
bin   mail
[2200][giles@nikola:~]$

Komut ikamesinin dolar işaretinden önce ters eğik çizgiyi fark etmek önemlidir. Onsuz, harici komut tam olarak bir kez yürütülür: PS1 dizesi ortama okunduğunda.


Teşekkür ederim! Şimdi sadece fonksiyondan döndürülen kaçış dizileri yerine renkleri yazdırmak için alabilir miyim ...
darthbith

6

Eğer kullanıldığında $(..)çift tırnak içinde, kabuk için atamadan önce komut ikamesi değerlendirdi PS1. Böylece, PS1komutun yerine değil sadece çıktı içerdi. Bunun yerine, ya tek tırnak kullanın ya $da dizeden olduğu gibi geçirilmesi için PS1komuttan çıkın ve bilgi istemi ayarlandığında değerlendirilir:

$ PS1='$(pwd) $ '
/tmp $ cd /var
/var $ echo "$PS1"
$(pwd) $ 

Karşılaştırmak:

/var $ PS1="$(pwd) $ "
/var $ echo "$PS1"
a /var $  a
/var $ 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.