Históricamente, los archivos de perfil ( /etc/profile
y ~/.profile
) fueron invocados cuando inició sesión (en la consola de texto, ¿qué más?) Y sirvieron para muchos propósitos:
- Establezca variables de entorno y otros parámetros (por ejemplo, umask) para la sesión.
- Ejecute programas adicionales al comienzo de la sesión (por ejemplo, notificación por correo electrónico).
- Ejecute el programa para la sesión, si es diferente del shell (por ejemplo, otro shell o X Window).
- Establezca los parámetros del terminal (p
stty
. Ej .).
- Establecer parámetros de shell (por ejemplo, alias).
Todos estos propósitos no se identificaron como separados hasta más tarde. Debido a que los scripts de perfil pueden hacer cosas que solo tienen sentido en una sesión interactiva (interacción de terminal, iniciar otros programas), cuando se introdujo la invocación de shell remoto ( rsh ), las marcas de rsh decidieron no invocar el shell remoto como un shell de inicio de sesión, para que los scripts de perfil no se ejecuten. (Algunas versiones de rshd
tienen una opción para ejecutar el shell remoto como un shell de inicio de sesión). Ssh copió este comportamiento para ser un reemplazo directo de rsh.
Si desea ejecutar sus scripts de perfil, puede invocarlos explícitamente.
ssh 127.0.0.1 '. /etc/profile; . ~/.profile; ydisplay'
Tenga en cuenta el comando .
para cargar los scripts de perfil dentro del shell: son comandos que se ejecutarán dentro de ese shell, no un programa externo.
Si desea establecer una variable de entorno globalmente para todos los usuarios, hay otro método en muchos sistemas: en lugar de definirlo en /etc/profile
, defínalo en /etc/environment
. Este archivo se lee a través del pam_env
módulo; la mayoría de las distribuciones de Linux están configuradas para leerlo.
Si su shell de inicio de sesión es bash, existe otra posibilidad. Normalmente, no debe establecer variables de entorno en.bashrc
(porque no se establecerán en sesiones X, excepto si pasa por un terminal con un shell interactivo, porque no se establecerán si inicia sesión de forma interactiva en una consola de texto o más ssh, porque anularán la configuración personalizada si invoca un shell dentro de otro programa). Sin embargo, bash tiene una característica extraña que nunca he entendido: se lee ~/.bashrc
en dos circunstancias no relacionadas:
- en shells interactivos que no son shells de inicio de sesión;
- en shells no interactivos que no son shells de inicio de sesión, si bash cree que ha sido invocado por
rshd
o sshd
.
Cuando ejecuta un comando sobre ssh, se encuentra en el segundo caso. Puede organizar la lectura de su perfil leyendo /etc/profile
y .profile
desde .bashrc
. Incluya el siguiente código en su ~/.bashrc
:
case $- in
*i*) :;; # this is an interactive shell, fine
*) # This is not an interactive shell! This must be a non-interactive remote shell session.
. /etc/profile; . ~/.profile
return;;
esac
ydisplay
trabajo? hacessh 127.0.0.1 /usr/app/cpn/bin/ydisplay
el trabajo?