Solíamos usar /etc/environment
para establecer variables de entorno de todo el sistema en Mountain Lion. Sin embargo, parece que este archivo ya no se lee.
Idealmente, la solución debería aplicarse a todos los usuarios, y necesitamos que funcione con sesiones de consola ssh. Entonces, necesitamos que esto funcione
ssh user@mavericks-machine 'echo $MY_ENV_VAR'
Hasta ahora hemos intentado:
/etc/launchd.conf
Funciona para todos los usuarios, pero solo se aplica a las aplicaciones 'en ventana', es decir, funciona en Terminal, pero no en una sesión ssh.
~/.profile
,~/.bash_profile
Etc.Solo aplica para proyectiles
¿Alguna sugerencia?
terminal
bash
environment-variables
joerick
fuente
fuente
/etc/environment
) no se lee porque no es un estándar entre sistemas, es solo parte de la instalación PAM de Linux. Mac OS X no es Linux y no utiliza PAM, ni otros sistemas operativos que yo sepa. Solo te saliste con la tuya porque estabas en Linux, aparentemente. Y sí, todavía se lee - por Linux ;-)Respuestas:
El archivo correcto, antes de Mavericks, era
~/.MacOSX/environment.plist
. Esto ya no es compatible.En Darwin, y por lo tanto en Mac OS X, el lugar adecuado para configurarlos es
/etc/launchd.conf
aplicarlo a todos los procesos; si se relaciona específicamente con shells de usuario, use los archivos de shell apropiados en su lugar, dependiendo del shell en cuestión. Vea las páginaslaunchd.conf
ylaunchctl
man para más.Dicho eso ...
Si su objetivo es ver específicamente estas aplicaciones aplicadas para sesiones ssh, entonces debe tener en cuenta que ssh, por razones de seguridad, no aplica variables de entorno de esta manera. De hecho, una sesión ssh normalmente recibe un conjunto mucho más restrictivo de variables de entorno del sistema operativo ya que no es lo que se conoce como un shell de "inicio de sesión" o "interactivo", se clasifica como un shell "no interactivo". (Consulte
man bash
para obtener más información sobre los tipos de shell). La forma en que ssh maneja las variables de entorno está bien cubierta en los documentos ssh / sshd y las páginas de manual.Para ssh, que es su propio shell, similar a bash, las variables de entorno para la sesión se almacenan
~/.ssh/environment
como el equivalente por usuario de configurarlas para bash o csh, etc. en sus archivos de inicio relevantes. Probablemente sea aquí donde desea establecer sus variables ENV para sus sesiones ssh de usuario, aunque no detalla por qué está buscando asignar ENV globalmente en su publicación original, lo que habría sido útil para proporcionar una solución. Te sugiero que los configures explícitamente en función de cada usuario para mantener la seguridad adecuada basada en cada cuenta respectiva siguiendo la mejor práctica de privilegio / atributo menos restrictivo.Si por alguna razón desea ignorar las implicaciones de seguridad de esto, configure
PermitUserEnvironment
sus configuraciones ssh. Tenga en cuenta que esto está deshabilitado siUseLogin
está habilitado. IMPORTANTE: Tenga en cuenta que esto significa que las cuentas de usuario configuradas para usar/bin/false
como su shell, el método típico para deshabilitar una cuenta de usuario, ahora pueden sortear esta restricción y ahora podrían activarse, lo cual es peligroso. Muchas cuentas están configuradas para usarse/bin/false
como su shell como expectativa de seguridad.En pocas palabras, no debería estar haciendo esto globalmente y esperar que ssh propague ENV por razones de seguridad. Su pregunta es, efectivamente, preguntando a propósito cómo derrotar varios mecanismos que existen por razones de seguridad.
fuente
/etc/launchd.conf
ya no funciona a partir de OSX 10.10 Yosemite.Si está utilizando
bash
, la configuración de las variables de entorno/etc/profile
se aplicará a todos los usuarios.Del
bash
manual sobre OS X Mavericks , con mi énfasis (esto no ha cambiado desde versiones anteriores):fuente
Lo que usted (y cualquier otra persona que encuentre esta pregunta) seguramente está buscando es la siguiente ruta:
Siempre puede colocar sus ediciones en el
/private/etc/paths.d
si desea evitar cambiar el documento de configuración de "rutas" predeterminado del sistema principal, pero luego se agregarán al final de su$PATH
variable, por lo que si desea agregar directorios al frente de$PATH
(para anular las utilidades predeterminadas del sistema, por ejemplo), solo tendrá que editar el/private/etc/paths
archivo principal y agregarlos al principio de la lista. Por ejemplo, hago esto para una carpeta en la que almaceno un puñado de scripts que hice yo mismo, junto con algunas utilidades clave, comomozjpeg
, que quiero que el sistema siempre use en lugar de los valores predeterminados con los que viene (de esa manera, todos los archivos jpeg guardados por prácticamente cualquier programa se comprimen automáticamente hasta en un 10% más de lo que la utilidad cjpeg del sistema normal los comprimiría - I ' He leído que la razón por la cual no es predeterminada en la mayoría de los sistemas es porque es mucho más lenta, pero cuando se habla de algo así como 0.14 segundos en lugar de 0.02 segundos, "más lento en un factor de 7" realmente no significa mucho de cualquier cosa ... suponiendo que esto no sea un servidor, por supuesto). Sé que mucha gente probablemente advertirá sobre el "peligro" potencial de realizar ediciones tan profundas en el sistema, pero diría que si está buscando una respuesta como esta, probablemente sepa lo suficiente para lidiar con cualquier nombre de utilidad conflictos que puedan surgir en el futuro,/private/etc/paths
realmente los propaga a todos los usuarios / inicios de sesión / instancias posibles: todos los programas, shells, etc. utilizarán las rutas en ese archivo para construir la base de su$PATH
variable.Para ser sincero, estoy bastante sorprendido de que nadie más haya mencionado esto todavía. Todo ese problema con el lanzamiento y las distracciones sobre los usos específicos de SSH ... esta es la solución que cualquiera que esté buscando este problema básico realmente está buscando: la solución limpia, directa al origen y siempre en funcionamiento.
Por cierto, en caso de que se lo pregunte, en OS X
/etc
es simplemente un enlace simbólico/private/etc
, por lo que podría hacerlo fácilmentesudo nano /etc/paths
y llegar al mismo lugar exacto. La ruta anterior es solo la ruta real completa del archivo.fuente
$PATH
. El OP parece estar buscando una solución genérica: configurar cualquier entorno, todo el sistema, por ejemplo$EDITOR
, etc.sudo
comando, en macOS Sierra, obtengo permiso denegado si intento crear, usandoecho
un nuevo archivo que/private/etc/paths.d
contiene una adición a la ruta. Pero funciona para crear primero el archivo y luego usarlosudo mv
para moverlo/private/etc/paths.d
.~/.zshrc
... el culpable era/private/etc/paths
y tuve que actualizar este archivo. Gracias.Tuve un problema similar, específicamente
~/.bashrc
no se originó cuando me conecté a mi máquina a través de SSH. Descubrí que cambiar una configuración de configuración para SSHd hizo el truco. ¿Quizás tu problema también esté en el demonio SSH?Modifique el archivo de configuración del servicio SSH de la siguiente manera:
Luego, reinicie el servicio de Inicio de sesión remoto en Preferencias del sistema> Compartir.
Desde la página del
sshd_config
manual:(En caso de que ayude, he escrito cómo probé esto en mi wiki personal )
fuente
Si otros buscan cómo establecer variables de entorno para procesos iniciados desde una sesión de inicio de sesión gráfica normal, puede usarla
/etc/launchd.conf
. Para, por ejemplo, agregar/usr/local/bin
a la ruta predeterminada, ejecutey reinicie para aplicar los cambios. Otra forma de aplicar los cambios es ejecutar
launchctl</etc/launchd.conf;sudo launchctl</etc/launchd.conf
y relanzar procesos.fuente
/etc/launchd.conf
ya no es compatible desde OSX 10.10 YosemiteHmm ... A partir de Mac OS X 10.10.5 y probablemente anterior,
man -s5 launchd.conf
nos dice: "launchd.conf is no longer respected by the system.
" Tengo demasiadas cosas en este momento para poner una variable ficticia en el archivo y reiniciar para ver si realmente funciona o no después todo, pero la documentación dice que no debería funcionar.Estoy bastante seguro de que no lo hará. Haz
man launchctl
y verás: "The /etc/launchd.conf file is no longer consulted for subcommands to run during early boot time; this functionality was removed for security considerations.
"Lo que puede hacer es poner todas las variables de entorno que desea que sean globales en algún archivo, tal vez llamado
environment
de acuerdo con Linux, o (en caso de que Apple decida hacer algo con eso más tarde, nunca se sabe)environment.conf
, como lo hice yo, luego obtenga esto a través de/etc/profile
:o, si prefiere el formato compacto:
Si usa otro shell que no sea bash, y usa la misma sintaxis de configuración de variables que bash (al igual que zsh, creo), también necesitará obtener este archivo del archivo rc de todo el sistema de ese shell (por ejemplo
/etc/zshrc
). Si usa un shell que usa una sintaxis diferente, por ejemplo, tcsh, deberá mantener un archivo similar para ese shell y obtenerlo del archivo rc de todo el sistema del shell (por ejemplo,/etc/csh.cshrc
para tcsh), o mejor aún crear un script eso lo genera automáticamente, por lo que solo tiene que editar un archivo para agregar / cambiar variables. Este no es el lugar para tal tutorial; unos segundos en Google descubrieron cómo convertir [t] exportaciones de variables csh a sintaxis bash, en https://stackoverflow.com/questions/2710790/how-to-source-a-csh-script-in-bash-to -set-the-enviroment, por lo que probablemente haya algo disponible para ir en la otra dirección.Según mi experiencia, Mac OS X se está alejando cada vez más del comportamiento predecible de los archivos rc. A partir de al menos 10,8, ya no parece cargar
/etc/rc.common
,/etc/rc.conf
o/etc/rc.<anything>
, ni (por lo menos desde 10,9) va a cargar/etc/bash.bashrc
en los depósitos sin inicio de sesión interactivos (que sin duda debería estar haciendo, al igual que carga~/.bashrc
para ellos, todavía, a partir de 10.10) . Por otra parte, tengo Fink, MacPorts y Homebrew, todos instalando cosas, por lo que tal vez uno de ellos está interfiriendo con el comportamiento predeterminado de los archivos de puntos. YMMV.fuente