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=2debería darte el equivalente de bash, pero eso no funciona correctamente en mi sistema.PROMPT_DIRTRIMfue 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
promptvarsopció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
PS1que 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
PS1variable, puede usar laPROMPT_COMMANDvariable para ejecutar el código para configurarloHPWDy 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
cdy 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. UnaPS1configuració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
.bashrcse carga, pero no cambiará a medida que navega por el sistema a otras carpetas.Tener esto en su
.bashrcarchivo 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='...'?$PWDcontiene un espacio./? Como está escrito, obtienes/// $La cadena de solicitud se puede cambiar fácilmente
basheditando la variable de shellPS1. Significa Prompt String 1. Más información aquí .Por ahora enciende tu
bashcaparazón.vi ~/.bashrcAgregue la definición de PS1 en el archivo
Más tutoriales aquí y aquí , para ayudarlo a ajustarlo aún más.
fuente
.bashrcse carga, ¡el aviso no cambiará si ingresacden otro directorio! @twalbaumPuede ser más simple con "~" para el directorio de inicio.
fuente
fuente
La configuración
PROMPT_DIRTRIM=2debe ser todo lo que necesita.fuente