¿Cómo puedo mostrar la ruta absoluta en bash prompt?

50

Actualmente tengo mi bash PS1configurado en algo como esto:

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

¿Cómo puedo hacer que muestre la ruta absoluta en lugar de la relativa (por ejemplo, en /home/dave/dirlugar de ~/dir)?

David B
fuente
1
/home/dave/diry ~/dirson ambas rutas absolutas, la segunda usa una abreviatura para su directorio de inicio. Una ruta relativa es una ruta relativa a su directorio actual (p ../dir. Ej. ) En lugar de comenzar en root ( /).
Doug Harris
3
ps Buen uso del color para indicar el estado de salida del comando anterior. Probablemente el primer uso de color en un aviso que me ha gustado.
Doug Harris
@ Douglas Harris: Gracias por la corrección. También me gusta este colorante. No recuerdo dónde lo vi por primera vez (¿tal vez en alguna publicación SU anterior?)
David B
\u@\H[\w]:~\$haceuser@host[~/path]:~$
JREAM

Respuestas:

49

Simplemente reemplace \wcon \$PWD:

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

De todos modos, si te importa un pequeño consejo, escribiría algo como:

PS1='\[`[ $? = 0 ] && X=2 || X=1; tput setaf $X`\]\h\[`tput sgr0`\]:$PWD\n\$ '
Ciro
fuente
44
Pensé en esto también, pero $PWDse evalúa en el momento de la asignación PS1, no en cada llamada. Sin embargo , si escapas del signo del dólar, funcionará \$PWD. Con esto, el signo de dólar es un signo de dólar en el momento de la asignación y la evaluación variable ocurre en cada solicitud. +1 a ti
Doug Harris
Bien, perdí eso, generalmente trabajo con comillas simples si es posible. Gracias.
cYrus
+1 ¡Gracias! ¿podría explicar la magia en su hermosa línea de bash (la 'punta')?
David B
Seguro. Usé tput (vea man tput para más información) para cambiar los colores en lugar de escribir los caracteres de control directamente, para facilitar la lectura y la portabilidad (?). También eliminé las comillas dobles y las barras diagonales usando comillas simples. Finalmente, al usar una variable, evité cierta redundancia.
cYrus
23

Poner en su casa .bashrc

PS1='\u@\h:\w\$ '
Alex
fuente
77
La clave aquí es \wdar la ruta completa mientras \Wque solo da el directorio. Ver "Bash Prompt Escape Sequences"
zamnuts
0

en la ps1 de bash; -W debería ser relativo, y -w absoluto, entonces en lo anterior ya deberías tener el absoluto.

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

Sirex
fuente
3
Creo que estás confundiendo absoluto | relativo con completo | current_dir. Wmuestra solo el nombre del directorio actual, wmuestra la ruta completa, pero aún usa rutas relativas.
David B
fue la terminología en la url, no la mía :)
Sirex
0

Humm ~ / dir es una ruta absoluta pero utiliza un "atajo". Por ejemplo, si lo hace, cd /usr/locallo más probable es que muestre la ruta completa de / usr / local. De todos modos, ya tienes un camino completo :-)

Pero probablemente su pregunta correcta es cómo mostrar la ruta completa sin atajos como ~?

Sin embargo, no sé una respuesta para esa pregunta y al mirar al hombre, parece tener una (al menos documentada).

Huygens
fuente
0

Ejecutar en pwdlugar de usar \W.

Versión simple:

export PS1="\`pwd\` $ "

Usando esto en su código:

export PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\`pwd\`\n\$ "
Doug Harris
fuente
1
punto menor: según la guía de estilo bash de google, prefiera $ (pwd) a backticks porque los backticks requieren escapar cuando se anidan y $ () no.
funroll