Parece que no puedo establecer un nuevo $ PATH tal que se use al ejecutar comandos a través de ssh user@host command
. He intentado agregar export PATH=$PATH:$HOME/new_path
a ~ / .bashrc y ~ / .profile en la máquina remota, pero la ejecución ssh user@host "echo \$PATH"
muestra que el cambio no se ha recogido (muestra / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games). La máquina remota está ejecutando Ubuntu 8.04.
Estoy seguro de que podría hackearlo en / etc / profile, pero esa no es una solución limpia y solo funciona cuando uno tiene acceso de root.
export PATH=$PATH:$HOME/new_path
tanto a ~ / .bash_login como a ~ / .bash_profile (además de los ~ / .bashrc y ~ / .profile probados anteriormente). Ninguno de los dos funciona. En ambos casos tuve que crear el archivo.Respuestas:
Como dijo Grawity, ~ / .bashrc es lo que desea, ya que proviene de shells no interactivos y sin inicio de sesión.
Espero que el problema que tienes tenga que ver con el archivo predeterminado de Ubuntu ~ / .bashrc. Suele comenzar con algo como esto:
Desea colocar cualquier cosa para shells no interactivos antes de esta línea.
fuente
export PATH=$PATH:$HOME/new_path
línea de arriba y funcionó. ¡Gracias!.zshenv
para los usuarios de zsh, me tomó bastante tiempo encontrarlo en los comentarios sobre otras respuestas¿Tienes un
~/.bash_login
o~/.bash_profile
?Bash en modo interactivo busca estos archivos y usa el primero existente , en este orden:
~/.bash_profile
~/.bash_login
~/.profile
Entonces, si tiene un
~/.bash_profile
, entonces cualquier cambio que haga no~/.profile
se verá.Bash en modo no interactivo a veces lee el archivo
~/.bashrc
(que a menudo también se obtiene de los scripts interactivos). Por "a veces" quiero decir que depende de la distribución: curiosamente, hay una opción de tiempo de compilación para habilitar esto . Debian permite la~/.bashrc
lectura, mientras que, por ejemplo, Arch no.ssh
parece estar usando el modo no interactivo,entonces~/.bashrc
debería ser suficiente. Cuando tengo problemas como este, generalmente agrego algunos ecos para ver qué archivos se están ejecutando.fuente
~/.bashrc
"? No veo esta declaración en la página de manual. Gracias~/.bashrc
, parece que necesita establecer adicionalmente la variable de entornoBASH_ENV
; ver superuser.com/a/585699/100843 . Para shells de inicio de sesión no interactivos, probablemente tenga que modificar uno de los tres scripts de inicio que mencionó..zshenv
.zshenv
siempre se obtiene; no importa si es interactivo o no.la documentación de ssh dice:
Es por eso que agregar a los archivos bashrc no funciona. Sin embargo, tiene las siguientes opciones:
Si la
PermitUserEnvironment
opción está configurada en la configuración sshd, puede agregar su configuración de RUTA a~/.ssh/environment
ssh remotemachine 'bash -l -c "somecommand"'
fuente
man sshd_config
dice que está desactivado de manera predeterminada, por lo que es poco probable que esta solución funcione para la mayoría de las personas. 2. Esto funcionaría, pero no puedo modificar fácilmente el comando enviado a ssh (vea el segundo comentario sobre mi pregunta).Siempre puedes decir:
fuente
Además de la respuesta @signpolyma, deberá agregar su exportación antes de estas líneas
fuente
Solo tuve el mismo problema, lo resolví con:
fuente