.bashrc en ssh login


375

Cuando ingreso a mi ubuntu-box con Hardy 8.04, las variables de entorno en mi .bashrcno están configuradas.

Si hago una fuente .bashrc, las variables están establecidas correctamente, y todo está bien.

¿Cómo .bashrces que no se ejecuta al iniciar sesión?


92
¿Cómo diablos está este "fuera de tema"?
Jonás

8
No soy estricto así, pero supongo que esto pertenece a serverfault.com, superuser.com o askubuntu.com
Michael Butler

16
@MichaelButler De acuerdo. Me pregunto por qué no lo mueven en lugar de simplemente cerrarlo ...
Luc

44
@Luc: las preguntas solo se pueden mover dentro de los 60 días posteriores a su creación. Esta pregunta no se cerró como fuera de tema hasta 3 años y medio después de su creación. Creo que la regla de los 60 días tiene algo que ver con la copia de seguridad de las bases de datos de preguntas o algo así ... se hace más difícil migrar después de que se produce esa copia de seguridad.
ArtOfWarfare

Pensé que era una pregunta bastante útil. Encontré este problema cuando tuve que ingresar en la máquina A para ingresar a la máquina B (solo accesible a través de la red local de A). Me enseñó una diferencia práctica entre .bashrcy .bash_profile!
información

Respuestas:


621

.bashrcno se obtiene cuando inicia sesión con SSH. Necesitas encontrarlo de .bash_profileesta manera:

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

32
esto debería funcionar en cualquier distribución sensata con Bash, por lo tanto, todos estos comentarios son obsoletos :)

1
Esto no es necesario con el servidor Ubuntu 12.04 LTS, ya que .bashrcse obtiene cuando ingresa SSH, de forma predeterminada.
orokusaki

44
@orokusaki: Corrección, es :) Había un archivo .bash_profile falso que obligaba a omitir .profile.
Lester Peabody

44
Al igual que @LesterPeabody, mi .bashrc no se obtuvo en un servidor Ubuntu 12.04 LTS debido a un .bash_profile falso. Fue creado por la instalación RVM. Moví el comando RVM a .profile y eliminé .bash_profile. Todo funciona bien ahora.
Rod Daunoravicius

44
fwiw Debian Jessie / 8 ya las fuentes .bashrcfuera de la caja - pero lo hace a partir .profile, no .bash_profile.
underscore_d

75

Tuve una situación similar como Hobhouse. Quería usar el comando

 ssh myhost.com 'some_command'

y 'some_command' existe en '/ var / some_location', así que intenté agregar '/ var / some_location' en el entorno PATH editando '$ HOME / .bashrc'

Pero eso no estaba funcionando. porque .bashrc predeterminado (Ubuntu 10.4 LTS) evita el abastecimiento por código como se muestra a continuación

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

Entonces, si desea cambiar el entorno para el shell ssh sin inicio de sesión. debe agregar código sobre esa línea.


77
¡Gracias amigo! Esto fue lo que no funcionó para mí :)
Raymond Barlow

Punta fresca de rocío. Me he encontrado con esta trampa al ejecutar scripts de jenkins. He iniciado sesión a través de ssh y funcionó. Jenkins inició sesión de forma no interactiva y falló.
Krzysztof Jabłoński

1
Por qué la solución común es ni siquiera establecer un nuevo camino para los shells no interactivos me supera. Debería haber un poco por encima de esa declaración if, solo por esta razón. Parece que sólo los alias y la inicialización de las herramientas interactivas debe ir por debajo de esa línea ...
Benpen

2
En otra versión de Ubuntu, la comprobación interactiva se ve así:bash # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac
Sylvain

Gracias, esto lo resolvió para mí. ¡Ojalá hubiera visto esto hace una hora!
Justin Lawrence el

31

Para obtener un excelente recurso sobre cómo funciona la invocación de bash, qué archivos de puntos hacen qué y cómo debe usarlos / configurarlos, lea esto:


El pasaje clave: "hace que lea / etc / profile y luego uno de .bash_profile o .bash_login o .profile".
Andy Hayden

29

Si la solución de ayman no funciona, intente nombrar su archivo en .profilelugar de .bash_profile. Eso funcionó para mí.


2
Increíble. Perdí 15 minutos en este detalle.
vmassuchetto

Esto hizo el truco en Ubuntu 12.10
ThinkCode

1
Creo que .profile se carga al iniciar sesión en la GUI. .bash_profile es para inicios de sesión de terminal.
Razec Luar

Esto también funcionó para el inicio de sesión SSH en un contenedor acoplable Debian Jessie (utilizando un contenedor de solo datos para el almacenamiento persistente), PERO también puede verificar / etc / passwd para verificar que su shell de inicio de sesión sea / bin / bash & not / bin / sh -------> / bin / dash
Stuart Cardall

1
@RazecLuar .profiledebe ser ejecutado por cualquier shell de inicio de sesión, independientemente de si dicho shell tiene la intención de generar una GUI. Su comentario contradice totalmente la pregunta y esta respuesta, que indican claramente que .profilese invoca en SSHing en - un método claramente no GUI.
underscore_d
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.