El indicador de bash se restablece cada vez que inicio sesión

El indicador de bash se restablece cada vez que inicio sesión

Yo preguntéesta preguntaHace algún tiempo que el shell no muestra la ruta. Recientemente descubrí que .bashrcno se obtiene la fuente (y esto debería ser unpractica normal?). Actualmente, el símbolo del sistema del shell es así:

-bash-4.3#

Después de ejecutar source .bashrc, puedo obtener el símbolo del sistema de shell esperado:

root@ubuntu2011:~#

¿Dónde ubuntu2011está el nombre de la máquina? ¿Cómo puedo hacer que el mensaje se parezca al último cada vez que inicio sesión?

PD: el .bashrces de:cp /etc/skel/.bashrc ~/.bashrc


ACTUALIZAR: el contenido de ~/.profilees el siguiente:

# ~/.profile: executed by Bourne-compatible login shells.

if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi

mesg n

y echo $BASHregresa/bin/bash


ACTUALIZAR: Respuestas a las preguntas de @terdon:

  1. ¿Cómo inicio sesión en el servidor?

Yo suelo iniciar sesión comossh [email protected]root

  1. ¿Se ejecutan esos comandos como root?

Sí.


ACTUALIZAR: La salida de ls -l ~/.{profile,bashrc,bash_profile,bash_login}:

ls: cannot access /root/.bash_login: No such file or directory
-rw-r--r-- 1 root root   63 Dec 24  2012 /root/.bash_profile
-rw-r--r-- 1 root root 3637 May 17 17:00 /root/.bashrc
-rw-r--r-- 1 root root  140 Apr 23  2010 /root/.profile

Respuesta1

Esto sucede porque estás iniciando sesión a través de ssh. Todo se reduce a las diferencias entre shells de inicio de sesión y sin inicio de sesión. Cuando te conectas a través de ssh, ejecutas un shell interactivo de inicio de sesión. Como se explica en man bash, este tipo de shell:

Cuando se invoca bash como un shell de inicio de sesión interactivo, o como un shell no interactivo con la opción --login, primero lee y ejecuta comandos del archivo /etc/profile, si ese archivo existe. Después de leer ese archivo, busca ~/.bash_profile, ~/.bash_login y ~/.profile, en ese orden, y lee y ejecuta comandos desde el primero que existe y es legible. La opción --noprofile se puede utilizar cuando se inicia el shell para inhibir este comportamiento.

En otras palabras, ~/.bashrcse ignora de forma predeterminada cuando se ejecutan shells de inicio de sesión. La solución simple es obtenerlo explícitamente de uno de los archivos que se leen. Como puede ver arriba, los shells de inicio de sesión primero intentarán leer ~/.bash_profile, y si eso no existe ~/.bash_login, y si tampoco existe, leen ~/.profile. Como tiene un ~/.bash_profilearchivo, deberá agregarle estas líneas:

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

Respuesta2

Pon esto en tu ~/.profile

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

información relacionada