Soy nuevo en bash y me gustaría que mi mensaje muestre algo que en tcsh fue trivial, pero después de una buena búsqueda en Google todavía no puedo hacer.
Me gustaría que mi mensaje incluya solo los directorios actuales y principales como este:
/parent/currentdir $
En tcsh esto se logra mediante:
set prompt = "%C2 %"
Sin embargo, en bash hasta ahora solo he encontrado que tengo que analizar pwd para obtener la misma salida.
¿No hay una manera más simple, como hacer:
export PS1="$(some_command) $"
PS1='\w \$'; PROMPT_DIRTRIM=2
debería darte el equivalente de bash, pero eso no funciona correctamente en mi sistema.PROMPT_DIRTRIM
fue introducido en Bash 4 . ¡Acabo de probar en Ubuntu 16.04 con WSL y funcionó muy bien!Respuestas:
Las características de control rápido de Bash son bastante estáticas. Si desea más control, puede incluir variables en su solicitud; asegúrese de no haber desactivado la
promptvars
opción .Tenga en cuenta las comillas simples: las expansiones de las variables deben ocurrir en el momento en que se muestra la solicitud, no en el momento en
PS1
que se define la variable.Si desea tener más control sobre lo que se muestra, puede usar sustituciones de comandos. Por ejemplo, el fragmento anterior pierde la
~
abreviatura del directorio de inicio.Este código es bastante engorroso, por lo que en lugar de pegarlo en la
PS1
variable, puede usar laPROMPT_COMMAND
variable para ejecutar el código para configurarloHPWD
y luego usarlo en su solicitud.Dado que la solicitud abreviada solo cambió en un cambio de directorio, no necesita volver a calcularla cada vez que se muestra una solicitud. Bash no proporciona un enlace que se ejecute en un cambio de directorio actual, pero puede simularlo anulando
cd
y sus primos.Tenga en cuenta que no necesita y no debe exportar
PS1
, ya que es una configuración de shell, no una variable de entorno. UnaPS1
configuración de bash no sería entendida por otros proyectiles.PD: si desea una buena experiencia de shell interactivo, cambie a zsh , donde todas estas (
%
expansiones rápidas que abarcan en gran medida tcshchpwd
, etc.) son características nativas.fuente
La sintaxis para obtener los directorios padre y actual se toma de la respuesta de Munai .
Sin embargo, como señaló Gilles, ese código solo muestra el directorio actual en el momento en que
.bashrc
se carga, pero no cambiará a medida que navega por el sistema a otras carpetas.Tener esto en su
.bashrc
archivo hace que la solicitud se actualice automáticamente en su directorio actual:fuente
prompt_command()
supone que definir debe hacer algo por sí solo? No es para mi. ¿Querías usar tambiénprompt_command()
en redefiniciones decd
& co, como hizo Gilles? ¿O quisiste decirPROMPT_COMMAND='...'
?$PWD
contiene un espacio./
? Como está escrito, obtienes/// $
La cadena de solicitud se puede cambiar fácilmente
bash
editando la variable de shellPS1
. Significa Prompt String 1. Más información aquí .Por ahora enciende tu
bash
caparazón.vi ~/.bashrc
Agregue la definición de PS1 en el archivo
Más tutoriales aquí y aquí , para ayudarlo a ajustarlo aún más.
fuente
.bashrc
se carga, ¡el aviso no cambiará si ingresacd
en otro directorio! @twalbaumPuede ser más simple con "~" para el directorio de inicio.
fuente
fuente
La configuración
PROMPT_DIRTRIM=2
debe ser todo lo que necesita.fuente