Jak wyświetlić bezwzględną ścieżkę w monicie bash?


50

Obecnie mam bash PS1ustawiony na coś takiego:

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

Jak sprawić, by pokazywała ścieżkę bezwzględną zamiast względnej (np. /home/dave/dirZamiast ~/dir)?


1
/home/dave/diri ~/dirobie są ścieżkami bezwzględnymi, drugi używa skrótu do twojego katalogu domowego. Ścieżka względna to ścieżka względna do bieżącego katalogu (np. ../dir), A nie zaczynająca się od root ( /).
Doug Harris

3
ps Ładne użycie koloru do wskazania statusu wyjścia poprzedniego polecenia. Prawdopodobnie pierwsze użycie koloru w znaku zachęty, który mi się podobał.
Doug Harris

@Doug Harris: Dzięki za korektę. Ja też lubię tę kolorystykę. Nie pamiętam, gdzie go po raz pierwszy zobaczyłem (może w jakimś poprzednim poście SU?)
David B

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

Odpowiedzi:


49

Wystarczy wymienić \wz \$PWD:

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

W każdym razie, jeśli masz coś przeciwko małej wskazówce, napisałbym coś takiego:

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

4
Też o tym myślałem, ale $PWDjest on oceniany w momencie przypisania do PS1, a nie przy każdym połączeniu. Jednakże , jeśli można uciec znak dolara, to będzie działać - \$PWD. Dzięki temu znak dolara jest znakiem dolara w momencie przypisania, a ocena zmiennej odbywa się przy każdym znaku zachęty. +1 dla ciebie.
Doug Harris

Racja, przegapiłem \, zazwyczaj pracuję z pojedynczymi cudzysłowami, jeśli to możliwe. Dzięki.
crus

+1 dzięki! czy mógłbyś wyjaśnić magię w swojej pięknej linii bash („tip”)?
David B

Pewnie. Użyłem tput (zobacz man tput, aby uzyskać więcej informacji), aby zmienić kolory, zamiast pisać bezpośrednio znaki sterujące, w celu zapewnienia czytelności i przenośności (?). Usunąłem także podwójne cudzysłowy i ukośniki odwrotne, używając pojedynczych cudzysłowów. Wreszcie, używając zmiennej, uniknąłem nadmiarowości.
crus


0

w ps1 basha; -W powinno być względne i -w absolutne, więc w powyższym przypadku powinieneś już mieć absolut?

http://wiki.archlinux.org/index.php/Color_Bash_Prompt


3
Myślę, że mylisz absolutnego | krewnego z pełnym | bieżącym katalogiem. Wpokazuje tylko bieżącą nazwę katalogu, wpokazuje pełną ścieżkę, ale nadal używa ścieżek względnych.
David B

była terminologia w adresie URL, a nie moja :)
Sirex

0

Humm ~ / dir jest ścieżką absolutną, ale używa „skrótu”. Na przykład, jeśli to zrobisz, cd /usr/localnajprawdopodobniej wyświetli się pełna ścieżka do katalogu / usr / local. W każdym razie masz już pełną ścieżkę :-)

Ale prawdopodobnie twoje poprawne pytanie brzmi: jak wyświetlić pełną ścieżkę bez skrótów takich jak ~?

Jednak nie znam odpowiedzi na to pytanie i patrząc na mężczyznę, wydaje się, że ma jedną (przynajmniej udokumentowaną).


0

Uruchom pwdzamiast używać \W.

Prosta wersja:

export PS1="\`pwd\` $ "

Używając tego w swoim kodzie:

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

1
drobna uwaga: zgodnie z przewodnikiem po stylu bash w Google, wolisz $ (pwd) od backticks, ponieważ backticks wymagają ucieczki, gdy nesting i $ () nie.
funroll
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.