¿Cómo mostrar la ruta actual en el símbolo del sistema en sh de Linux (no bash)?


43

Me gustaría mostrar la ruta actual en sh prompt (no bash shell), que actualmente solo muestra "#", traté de presentar esto

env PS1="$(whoami)@$(hostname):$(pwd)"

y

set PS1="$(whoami)@$(hostname):$(pwd)"

en /etc/profile.

Pero como es obvio, esto no se actualiza cuando se cambia el directorio o el usuario cambia. Sugiera una forma de hacer esta dinámica.


1
Tenga en cuenta que cada uno $()ejecuta un programa separado; sería más rápido usar variables de entorno, como $LOGNAME, $HOSTNAMEy en su $PWDlugar.
Grawity

Una respuesta fue usar comillas simples en lugar de comillas dobles, sin embargo, esa es la respuesta correcta completa. Lo que realmente quiere hacer es diferir la evaluación del código dentro de su solicitud hasta que se use la solicitud.
MaasSql

Todo lo que necesita es utilizar la exportación "PS1 =" $ (whoami) @ $ (hostname): $ (pwd)> "luego edite / etc / profile y agregue esta línea al final.
SDsolar

Respuestas:


76

Las sustituciones de comandos entre comillas dobles "se expanden inmediatamente. Eso no es lo que quieres para tu solicitud. Las comillas simples 'conservarán las sustituciones en las $PS1que luego solo se expandirán al mostrar la solicitud. Por lo tanto, esto debería funcionar:

export PS1='$(whoami)@$(hostname):$(pwd)'

Si desea el signo de dólar habitual y un espacio al final de su solicitud, simplemente agregue $al final (no es necesario escapar):export PS1='$(whoami)@$(hostname):$(pwd)$ '


1
Funcionó de maravilla después de cambiar 'establecer' a 'exportar' en su respuesta export PS1='$(whoami)@$(hostname):$(pwd)$', guardé los cambios en /etc/profile. Gracias.
Bleamer

@Bleamer: setfuncionó para mí (pero no tenía un nativo sh). Pero lo cambiaré exportpara cumplir con su configuración.
mpy

2
¿Hay alguna manera de hacer esto permanente? Actualmente tengo que hacerlo cada vez que inicio sesión. ¡Gracias!
the.ufon

3
Has puesto esta línea en /etc/profile(ver pregunta) o ~/.profile?!
mpy

+1, sin embargo, esto necesitaría un delimitador al final. Como es, obtienes algo como foo@localhost:/home/fools -lacuando lo usas ls -la.
phresnel

12
sh-4.2$ export PS1="\u@\h:\w>"
jenny@serenity:~>cd /usr/local
jenny@serenity:/usr/local>

1
Me temo que funciona para bash shell, no para sh, cuando hago esto me \u@\h:\w>
aparece

1
Debe ser una versión sh diferente; Como puede ver en la primera línea, funcionó para mí en sh 4.2.
Jenny D

1
Ese puede ser el caso. Este caparazón es de Busy Box. Gracias. Sin embargo, aprecio tu ayuda.
Bleamer

@Bleamer, funciona para mí BusyBox v1.19.4 built-in shell (ash).
cjm

Gracias por la respuesta @cjm, aunque evitaré profundizar en esto.
Bleamer

5

Este comando me funciona.

export PS1="\u@\h: \W:$"

Donde
\ u = nombre de usuario
\ h = nombre de host
\ W Nombre de la carpeta actual (ruta no completa)


+1 para el parámetro \ W
Dimitry K

3

Se podría considerar aumentar el indicador agregando algunos colores. Por ejemplo:

export PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[0;33m\]\h\[\e[0m\]:\[\e[0;35m\]\w\[\e[0m\]\$ '

1
Esto es lo que estaba buscando. Espero que a todos les gusten algunos colores en la vida :)
Govind Kailas

Al menos yo si. ;)
Arvid

1

Una respuesta fue usar comillas simples en lugar de comillas dobles, sin embargo, esa no es la respuesta correcta completa. Lo que realmente quiere hacer es diferir la evaluación del código dentro de su solicitud hasta que se use la solicitud.

set PS1="$(pwd)" 

establece el indicador en el directorio de trabajo a partir del comando set.

set PS1="\$(pwd)" 

NO expande $ (pwd). En cambio, PS1 se establece en el valor literal de $ (pwd).

Pruebe / Comprenda esto ejecutando:

echo $PS1

. Si ve la cadena: $ pwd, su solicitud funciona. Si ve la ruta literal, la solicitud se interrumpe porque se ha establecido estáticamente


1

Use el siguiente comando para configurarlo como en el panel de control.

export PS1='$(whoami)@${HOSTNAME%%.*} [$ (pwd)] # '


¡Gracias! Ninguna de las otras opciones anteriores funcionó. Este lo hizo. Me estaba volviendo loco. Gracias por salvar mi cordura. ¡DECIR AH!
Lee_Str
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.