Estoy especificando la ruta a mi comando en el archivo / etc / profile :
export PATH=$PATH:/usr/app/cpn/bin
Mi comando se encuentra en:
$ which ydisplay
/usr/app/cpn/bin/ydisplay
Entonces, cuando realizo la salida "echo $ PATH" se ve así:
$ echo $PATH
...:/usr/app/cpn/bin
Y todo está bien, pero cuando intento iniciar mi comando a través de SSH obtengo un error:
$ ssh 127.0.0.1 ydisplay
$ bash: ydisplay: command not found
Pero el mi camino todavía está presente:
$ ssh 127.0.0.1 echo $PATH
...:/usr/app/cpn/bin
Explíqueme por qué Bash no puede encontrar ydisplay durante la sesión SSH y cómo configurar SSH correctamente para evitar este problema.
Además, si especifico $ PATH en el archivo local .bashrc en el usuario actual, todo funciona correctamente. Pero quiero modificar solo un archivo en lugar de especificar muchos archivos para cada usuario. Es por eso que estoy preguntando.

ydisplaytrabajo? hacessh 127.0.0.1 /usr/app/cpn/bin/ydisplayel trabajo?ssh 127.0.0.1 echo $PATHno hace lo que podría pensar que hace: el shell expande $ PATH antes de que incluso se ejecute ssh, por lo que eso no prueba ni refuta nada.Respuestas:
tl; dr
Ejecutando
ssh 127.0.0.1 ydisplayfuentes en~/.bashrclugar de/etc/profile. Cambia tu camino en su~/.bashrclugar.detalles
El único momento que
/etc/profilese lee es cuando su shell es un "shell de inicio de sesión".Del Manual de referencia de Bash :
Pero cuando ejecuta
ssh 127.0.0.1 ydisplay,bashno se inicia como un shell de inicio de sesión. Sin embargo, sí lee un archivo de inicio diferente. El Manual de referencia de Bash dice:Entonces deberías poner tu
PATHconfiguración~/.bashrc.En la mayoría de los sistemas, las
~/.bash_profilefuentes~/.bashrc, por lo que puede colocar su configuración solo en~/.bashrclugar de colocarla en ambos archivos.No hay manera estándar para cambiar la configuración para todos los usuarios, pero la mayoría de los sistemas tienen una
/etc/bashrc,/etc/bash.bashrco similar.De lo contrario, configure
pam_envy ponga laPATHconfiguración/etc/environment.Ver también:
fuente
Históricamente, los archivos de perfil (
/etc/profiley~/.profile) fueron invocados cuando inició sesión (en la consola de texto, ¿qué más?) Y sirvieron para muchos propósitos:stty. Ej .).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
rshdtienen 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.
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 delpam_envmó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~/.bashrcen dos circunstancias no relacionadas:rshdosshd.Cuando ejecuta un comando sobre ssh, se encuentra en el segundo caso. Puede organizar la lectura de su perfil leyendo
/etc/profiley.profiledesde.bashrc. Incluya el siguiente código en su~/.bashrc:fuente