Acabo de pasar mucho tiempo leyendo sobre el inicio de sesión y los shells interactivos y por qué uno debería o no configurar el entorno variables, funciones de shell, etc. en los diversos archivos de perfil y bashrc. En esta publicación se mencionó que las cosas específicas de bash, como las opciones de solicitud, deben configurarse en ~ / .bashrc. Eso me llevó a preguntarme sobre la variable PS1. En todos los ejemplos que he visto con respecto a esto, tienen algo como export PS1="". ¿Debería realmente exportarse al entorno ya que solo tiene significado para bash? Solo tener PS1="" en mi ~ / .bashrc produce el efecto deseado para mí, pero me pregunto si me estoy perdiendo algo.

Respuesta

Eso es correcto: PS1 solo es significativo en instancias interactivas de bash, por lo que debe establecerse en ~/.bashrc y no debe exportarse. PS1 también es significativo en otros shells, pero tiene un significado diferente, porque las expansiones de avisos difieren entre shells. De hecho, incluso entre instancias de bash, PS1 puede tener diferentes significados, ya que el significado depende de las opciones del shell (al menos promptvars).

Exportar PS1 al entorno desde .profile es un retroceso a la década de 1970, cuando solo había un shell que lo usó (el shell Bourne) y no tenía un archivo de configuración. Todavía funciona hoy si siempre usa el mismo shell y nunca lo configura de manera diferente. Pero todos los shells modernos que no están diseñados exclusivamente para secuencias de comandos (csh, ksh , bash, zsh,…) lee un archivo de configuración cuando se inicia de forma interactiva (.cshrc, .kshrc, .bashrc, .zshrc,…), por lo que el método de la década de 1970 ya no es necesario. Establecer PS1 y otras configuraciones específicas de shell en un archivo específico de shell, y no exportarlo al entorno, evita romper cosas cuando usa una configuración de shell diferente o un shell diferente o un terminal diferente que no es capaz de mostrar su fantasía habitual. La configuración de PS1 en un archivo específico de shell funciona todo el tiempo, mientras que la configuración en .profile y exportarlo solo funciona en casos “simples”, por lo que no hay razón para no hacerlo de la manera correcta, pero hay muchos tutoriales malos en la web e incluso malas configuraciones predeterminadas en las distribuciones. C «est la vie .

Comentarios

  • ¿Cómo exportar PS1 de .profile funcionan para shells de bash sin inicio de sesión, ya que no ' t la fuente? ¿Estás diciendo que esto funcionaría porque no el shell de inicio de sesión se bifurcaría desde un shell de inicio de sesión, por lo que ¿heredaría PS1 a través del entorno?
  • @MikeSweeney sí, eso ' s por qué ' s exportado .
  • Una forma en que se difunde la idea equivocada sobre la exportación de PS1 es viendo if [ -n "$PS1" ] ; then proceed assuming an INTERACTIVE shell ; fi – que suele aparecer en los archivos ' s .bashrc de las personas para cargar solo cosas como la finalización de comandos si se trata de un usuario ' s shell de terminal interactivo. Por lo tanto, al ver que funciona allí, la misma lógica termina en los scripts de shell, por lo que " necesita " para exportarlo. EN SU LUGAR, deberíamos buscar en usuarios teractivos / terminales con tty -s o test -t 0.
  • @DouglasDD De hecho. La prueba PS1 se ha realizado en Debian ' s /etc/profile durante años, por ejemplo. No ' no sé dónde surgió esta mala práctica. Sospecho que provino de un caso de uso en particular (¿tal vez detectando inicios de sesión rlogin o ssh?) Donde sucedió que funciona. Desafortunadamente, falla en muchos otros casos, de ahí las muchas preguntas sobre este tema aquí y en otros lugares.
  • @Gilles no deberíamos exportar CLICOLOR y LS_COLORS ¿tampoco? @DouglasDD, ¿eso significa que el if [[-z $p1]];then return fi comprobar en mi .bashrc es defectuoso?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *