Come posso visualizzare il percorso assoluto nel prompt di bash?


50

Attualmente ho il mio bash PS1impostato su qualcosa del genere:

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

Come posso fare in modo che mostri il percorso assoluto anziché quello relativo (ad es. /home/dave/dirInvece di ~/dir)?


1
/home/dave/dire ~/dirsono entrambi percorsi assoluti, il secondo usa un'abbreviazione per la tua home directory. Un percorso relativo è un percorso relativo alla directory corrente (ad es. ../dir) Anziché iniziare da root ( /).
Doug Harris,

3
ps Un buon uso del colore per indicare lo stato di uscita del comando precedente. Probabilmente il primo utilizzo del colore in un prompt che mi è piaciuto.
Doug Harris,

@Doug Harris: grazie per la correzione. Mi piace anche questa colorazione. Non ricordo dove l'ho visto per la prima volta (forse in qualche precedente post SU?)
David B

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

Risposte:


49

Sostituisci semplicemente \wcon \$PWD:

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

Comunque se ti dispiace un piccolo suggerimento, scriverei qualcosa del tipo:

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

4
Ho pensato anche a questo, ma il valore $PWDviene valutato al momento dell'assegnazione PS1, non ad ogni chiamata. Tuttavia , se si sfugge al simbolo del dollaro, funzionerà - \$PWD. Con questo, il simbolo del dollaro è un simbolo del dollaro al momento dell'assegnazione e la valutazione variabile avviene su ogni prompt. +1 a te.
Doug Harris,

Giusto, mancato \, di solito lavoro con virgolette singole se è possibile. Grazie.
cYrus,

+1 Grazie! potresti per favore spiegare la magia nella tua bellissima linea bash (quella del 'suggerimento')?
David B,

Sicuro. Ho usato tput (vedi man tput per maggiori informazioni) per cambiare i colori piuttosto che scrivere direttamente i caratteri di controllo, per leggibilità e portabilità (?). Inoltre ho rimosso le virgolette doppie e le barre rovesciate usando le virgolette singole. Infine, usando una variabile ho evitato un po 'di ridondanza.
cYrus,


0

nella ps1 di bash; -W dovrebbe essere relativo e -w assoluto, quindi in quanto sopra dovresti già avere l'assoluto ?!

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


3
Penso che tu stia confondendo assoluto | relativo con pieno | current_dir. Wmostra solo il nome della directory corrente, wmostra il percorso completo, ma utilizza comunque percorsi relativi.
David B,

era la terminologia nell'url, non la mia :)
Sirex,

0

Humm ~ / dir è un percorso assoluto ma utilizza una "scorciatoia". Ad esempio, se lo fai il cd /usr/localtuo prompt molto probabilmente visualizzerà il percorso completo di / usr / local. Quindi, hai già un percorso completo :-)

Ma probabilmente la tua domanda corretta è come visualizzare l'intero percorso senza scorciatoie come ~?

Tuttavia, non conosco una risposta per quella e guardando l'uomo, sembra averne una (almeno documentata).


0

Esegui pwdinvece di utilizzare \W.

Versione semplice:

export PS1="\`pwd\` $ "

Usando questo nel tuo codice:

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

1
punto secondario: secondo la guida di stile bash di google, preferisci $ (pwd) ai backtick perché i backtick richiedono la escape durante l'annidamento e $ () no.
funroll
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.