.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?

Hobhouse
fuente
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
Ayman Hourieh
fuente
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.

2 revoluciones
fuente
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:

lhunath
fuente
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í.

Loïc Wolff
fuente
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