¿Por qué root no obtiene .bash_profile?

10

Cada vez que intento iniciar sesión como root usando su(no su -), no se encuentra .bash_profileen el directorio de inicio del usuario1.

Básicamente, mi /var/rootdirectorio no tiene .bash_profile, por lo que poner una copia de .bash_profileen /var/roota prueba su -.

Tampoco se origina automáticamente .bash_profile(en var/root).

De todos modos, quiero hacer .bash_profile, de usuario1, originado en la cuenta raíz automáticamente cuando lo uso su.

¿Qué tengo que hacer?

(¡Funcionó antes! ¡Un día, simplemente no funciona! ¿Tal vez algo cambió la configuración en bash? Funciona cuando entro source .bash_profiledespués de iniciar sesión).

Estoy usando Mac y OS X Yosemite.

sirion
fuente

Respuestas:

11

El shell predeterminado para rootOS X es /bin/sh. Su shes también una versión de bash, pero cuando se invoca con el nombre shBash :

intenta imitar el comportamiento de inicio de versiones históricas de la forma shmás cercana posible, al tiempo que se ajusta al estándar POSIX también.

Cuando se invoca como un shell de inicio de sesión interactivo o como un shell no interactivo con la --loginopción, primero intenta leer y ejecutar comandos desde /etc/profiley ~/.profile, en ese orden. ... un shell invocado como sh no intenta leer y ejecutar comandos desde ningún otro archivo de inicio

Es decir, no se lee .bash_profileen absoluto, independientemente de si se invocó como un shell de inicio de sesión o no . En su .profilelugar, puede usar , o incluso vincular uno a otro. Si inicia un shell de inicio de sesión con su -l, .profilese carga al inicio, pero .bash_profilenunca lo será.


También se puede utilizardscl para cambiar la cáscara de la raíz (señalando que /etc/passwdse no se utiliza para determinar la cáscara en OS X). Puede verificar el shell actual de root con dscl . -read /Users/root UserShell; consulte la documentación y piense detenidamente antes de cambiarla por otra cosa.

Otro enfoque es simplemente cambiar su suinvocación para forzar la ejecución bashinmediata.

Dado lo que ha dicho, probablemente recomendaría el enlace simbólico, pero es posible que desee ver los cambios que realiza el modo POSIX de Bash y decidir si desea tenerlos o no.

Michael Homer
fuente
5

Porque no se considera como un "shell de inicio de sesión" (que se invoca directamente desde login, o sshd) sino un simple "shell interactivo". Consulte aquí, por ejemplo: https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html

Por lo tanto, forzar el suuso de la opción de inicio de sesión, es decir, con la -lopción:

su -l

O ponga su entorno en .bashrcarchivo.

myaut
fuente
5

El usuario root intentará ejecutar el archivo .bashrc en lugar del .bash_profile ya que no está invocando un shell de inicio de sesión.

Del manual de bash man bash:

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file

Tenga en cuenta ~dónde debe estar el archivo .bashrc en el directorio principal del usuario raíz.

Para responder realmente a su pregunta, si desea que se use el archivo .bashrc del usuario1, le sugiero que haga un enlace (simbólico) entre el .bashrc de origen del usuario1 al usuario raíz.

También puede considerar la fuente del usuario1 .bashrc o incluso .bash_profile agregando la línea . /homedirectory/of/user1/.bash_profileal archivo .bashrc del usuario raíz.

Lambert
fuente