Solíamos usar /etc/environmentpara 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.confFunciona 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_profileEtc.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.confaplicarlo 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.confylaunchctlman 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 bashpara 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/environmentcomo 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
PermitUserEnvironmentsus configuraciones ssh. Tenga en cuenta que esto está deshabilitado siUseLoginestá habilitado. IMPORTANTE: Tenga en cuenta que esto significa que las cuentas de usuario configuradas para usar/bin/falsecomo 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/falsecomo 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.confya no funciona a partir de OSX 10.10 Yosemite.Si está utilizando
bash, la configuración de las variables de entorno/etc/profilese aplicará a todos los usuarios.Del
bashmanual 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.dsi desea evitar cambiar el documento de configuración de "rutas" predeterminado del sistema principal, pero luego se agregarán al final de su$PATHvariable, 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/pathsarchivo 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/pathsrealmente 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$PATHvariable.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
/etces simplemente un enlace simbólico/private/etc, por lo que podría hacerlo fácilmentesudo nano /etc/pathsy 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.sudocomando, en macOS Sierra, obtengo permiso denegado si intento crear, usandoechoun nuevo archivo que/private/etc/paths.dcontiene una adición a la ruta. Pero funciona para crear primero el archivo y luego usarlosudo mvpara moverlo/private/etc/paths.d.~/.zshrc... el culpable era/private/etc/pathsy tuve que actualizar este archivo. Gracias.Tuve un problema similar, específicamente
~/.bashrcno 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_configmanual:(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/bina 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.confy relanzar procesos.fuente
/etc/launchd.confya no es compatible desde OSX 10.10 YosemiteHmm ... A partir de Mac OS X 10.10.5 y probablemente anterior,
man -s5 launchd.confnos 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 launchctly 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
environmentde 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.cshrcpara 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.confo/etc/rc.<anything>, ni (por lo menos desde 10,9) va a cargar/etc/bash.bashrcen los depósitos sin inicio de sesión interactivos (que sin duda debería estar haciendo, al igual que carga~/.bashrcpara 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