Mutlak yolu bash isteminde nasıl görüntüleyebilirim?


50

Şu anda benim bash PS1böyle bir şey ayarladım:

PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\w\n\$ "

Göreceli yerine mutlak yolu (örneğin /home/dave/diryerine ~/dir) göstermesini nasıl sağlayabilirim ?


1
/home/dave/dirve ~/dirher ikisi de mutlak yollardır, ikincisi ana dizininiz için bir kısaltma kullanır. Bir göreceli yol olan bir yoldur göreceli geçerli dizine (örn için ../dir) yerine (kökünde başlayan /).
Doug Harris

3
ps Önceki komutun çıkış durumunu göstermek için rengin iyi kullanımı. Muhtemelen sevdiğim bir istemde ilk renk kullanımı.
Doug Harris

@Doug Harris: Düzeltme için teşekkürler. Ben de bu rengi seviyorum. Nerede ilk gördüğümüzü hatırlamıyorum (belki daha önceki bazı SU gönderilerinde?)
David B

\u@\H[\w]:~\$yaparuser@host[~/path]:~$
JREAM,

Yanıtlar:


49

Sadece değiştirmek \wile \$PWD:

PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\$PWD\n\$ "

Her neyse, küçük bir ipucu sakıncası varsa, şöyle bir şey yazardım:

PS1='\[`[ $? = 0 ] && X=2 || X=1; tput setaf $X`\]\h\[`tput sgr0`\]:$PWD\n\$ '

4
Bunu ben de düşündüm, fakat her görüşmede değil $PWD, ödev verildiği zaman değerlendirildi PS1. Ancak , dolar işareti kaçarsanız, çalışacak - \$PWD. Bununla birlikte, dolar işareti atama sırasında bir dolar işaretidir ve değişken değerlendirmesi her istemde gerçekleşir. +1 sana.
Doug Harris

Doğru, cevapsız \ \, mümkünse genellikle tek tırnak ile çalışırım. Teşekkürler.
cYrus

+1 Teşekkürler! Lütfen sihrinizi güzel bash hattınızda ('ipucu') açıklayabilir misiniz?
David B

Elbette. Okunabilirlik ve taşınabilirlik için kontrol karakterlerini doğrudan yazmak yerine renkleri değiştirmek için tput (daha fazla bilgi için man tput'a bakınız) kullandım (?). Ayrıca tek tırnak işaretleri kullanarak çift tırnak ve ters eğik çizgi kaldırdım. Sonunda bir değişken kullanarak bazı fazlalıklardan kaçınıyorum.
cYrus



0

Humm ~ / dir mutlak bir yoldur ancak "kısayol" kullanıyor. Örneğin, cd /usr/localisteminizi yaparsanız büyük olasılıkla / usr / local tam yolunu gösterecektir. Her neyse, zaten tam bir yolun var :-)

Fakat muhtemelen doğru sorunuz, tam yolun ~ gibi herhangi bir kısayol olmadan nasıl gösterileceğidir.

Ancak, bunun için bir cevap bilmiyorum ve adama bakarak, en azından belgelenmiş bir tane var gibi görünüyor.


0

pwdKullanmak yerine çalıştırın \W.

Basit versiyon:

export PS1="\`pwd\` $ "

Bunu kodunuzda kullanarak:

export PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\`pwd\`\n\$ "

1
küçük nokta: google’ın bash stil rehberine göre, backticks için $ (pwd) tercih edin çünkü backticks iç içe geçerken kaçmayı gerektirir ve $ () bunu yapmaz.
funroll,
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.