¿Cómo evitar tilde ~ en Bash prompt?

12

Me gustaría eliminar la tilde de la visualización dentro de la variable PS1.

Mi cadena actual de PS1:

PS1="\h:\w\n$"

Y el aviso se ve así:

lnx-hladky:/tmp/plugtmp
$

No me gusta que el directorio $ HOME se muestre como tilde. ¿Se puede evitar esto?

Causa problemas, por ejemplo:

lnx-hladky:~/DOC
$  

La documentación dice:

\w : the current working directory, with $HOME abbreviated with a tilde 
\W: the basename of the current working directory, with $HOME abbreviated with a tilde

¿Hay alguna posibilidad de evitar que $ HOME se abrevie con una tilde?

He encontrado una forma de evitarlo, pero siento que es demasiado complicado:

PROMPT_COMMAND='echo -ne "\e[4;35m$(date +%T)\e[24m$(whoami)@$(hostname):$(pwd)\e[m\n"'
PS1=$

¿Alguien puede proponer una mejor solución? Tengo la sensación de que no está del todo bien ejecutar tantos comandos solo para obtener un aviso. (fecha, whoami, nombre de host, pwd).

Jirka
fuente
¿Qué "problemas" causa la tilde en el ejemplo?
JBallin 01 de

Respuestas:

11

bash ejecuta expansiones en el prompt; solo asegúrate de escapar de ellos.

PS1='\h:$(pwd)\n$'
Ignacio Vazquez-Abrams
fuente
Eso responde mi pregunta. No sabía que existe tal posibilidad. Muchas gracias Ignacio!
Jirka
2
@Jirka: También puedes usar: `PS1 = '\ h: $ PWD \ n $'.
Pausado hasta nuevo aviso.
1
La solución de Jirka se ejecuta pwden cada solicitud. La solución de Dennis no lo hace, solo obtiene la variable de entorno PWD, que es mucho más barata.
Stéphane Gourichon
2
pwdes un bash incorporado. La afirmación de que ${PWD}es "mucho más barata" que $(pwd)sin evidencia.
Vineet
1
@anxieux: debe citar con comillas simples, no comillas dobles
weberjn
0

No necesita ejecutar tantos comandos como mostró en su ejemplo. bashproporciona atajos para la mayoría de las cosas que mencionaste.

Su ejemplo:

PROMPT_COMMAND='echo -ne "\e[4;35m$(date +%T)\e[24m$(whoami)@$(hostname):$(pwd)\e[m\n"'
PS1=$

puede reescribirse como:

PS1='\e[4;35m\t\e[24m\u@\h:\w\e[m\n'

Donde \tmuestra la hora (en formato de 24 horas), \umuestra el nombre de usuario actual, '\ h' muestra el nombre de host; la bashpágina de manual analiza estos y el resto de los escapes disponibles para su solicitud.

Incluso si expande la ~ruta a la ruta completa, si no sabe qué usuario está ejecutando el comando y cambia de usuario regularmente, puede crear problemas con los permisos de archivos o permisos ejecutables.

Doug Harris
fuente
Hola, mi intención era reemplazar \ w con la ruta completa, incluida la ruta FULL $ HOME. Gracias a Ignacio ahora estoy usando PS1 = '\ e [4; 35m \ t \ e [24m \ u @ \ h: $ (pwd) \ e [m \ n $' que ha resuelto mi problema :-)
Jirka
Perfecto: me gusta incluir \upara saber quién soy. No olvide aceptar la respuesta de Ignacio: haga clic en la casilla de verificación a la izquierda de la pregunta.
Doug Harris
Gracias por la pista. Soy nuevo en este foro. Es un sitio genial.
Jirka
\ u @ \ h: $ PWD (tenga en cuenta los dos puntos) se puede utilizar como entrada para scp
weberjn
0

Estoy usando la configuración a continuación en mi archivo .bash_profile

$ export PS1='\e[1;34m\D{%T %d.%m.%Y} \[\033[00;39m\]\u\[\033[00;32m\]@$IP:\[\033[00;33m\]$(pwd)/\n\\$\[\033[00m\] '

21:40:08 14.12.2017 vmware@10.112.202.228:/home/vmware/Downloads/
Mohammad Shahid Siddiqui
fuente