6 votos

.profile no se carga en /bin/sh que no está iniciado de sesión

El problema está en el título, pero permítanme añadir algunos detalles aquí.

Estoy corriendo en OS X 10.10.5 (14F27) . Utilizando el valor por defecto Terminal.app .


Contenido de los archivos de configuración

Contenido de /etc/profile

echo " # reading /etc/profile"
# System-wide .profile for sh(1)

if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi

if [ "${BASH-no}" != "no" ]; then
    [ -r /etc/bashrc ] && . /etc/bashrc
fi

Contenido de /etc/bashrc

echo " # reading /etc/bashrc"
# System-wide .bashrc file for interactive bash(1) shells.
if [ -z "$PS1" ]; then
   return
fi

PS1='\h:\W \u\$ '
# Make bash check its window size after a process completes
shopt -s checkwinsize
# Tell the terminal about the working directory at each prompt.
if [ "$TERM_PROGRAM" == "Apple_Terminal" ] && [ -z "$INSIDE_EMACS" ]; then
    update_terminal_cwd() {
        # Identify the directory using a "file:" scheme URL,
        # including the host name to disambiguate local vs.
        # remote connections. Percent-escape spaces.
    local SEARCH=' '
    local REPLACE='%20'
    local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"
    printf '\e]7;%s\a' "$PWD_URL"
    }
    PROMPT_COMMAND="update_terminal_cwd; $PROMPT_COMMAND"
fi

Contenido de ~/.profile

echo " # reading ~/.profile"
...

Contenido de ~/.bashrc

echo " # reading ~/.bashr"
...
source /etc/profile
...

Contenido de ~/.bash_profile

echo " # reading ~/.bash_profile"
source ~/.profile
source ~/.bashrc

Salida de la llamada sh y bash

Así que aquí está el resultado de invocar sh .

$ sh
sh-3.2$ 

sh --login
 # reading /etc/profile
 # reading /etc/bashrc
 # reading ~/.profile
d12frosted:~ d12frosted$ 

$ bash
 # reading ~/.bashr
 # reading /etc/profile
 # reading /etc/bashrc
d12frosted:~ d12frosted$ 

$ bash --login 
 # reading /etc/profile
 # reading /etc/bashrc
 # reading ~/.bash_profile
 # reading ~/.profile
 # reading ~/.bashr
 # reading /etc/profile
 # reading /etc/bashrc
d12frosted:~ d12frosted$ 

Como puede ver, al llamar a sh - no carga ninguna configuración. ¿Se ha roto algo en mi entorno o es lo esperado?

9voto

yoliho Puntos 340

Esto es lo que se espera sh sólo carga ~/.profile cuando es un shell de inicio de sesión.

Desde Manual de referencia de Bash

Si Bash es invocado con el nombre sh, trata de imitar el comportamiento de inicio de las versiones históricas de sh lo más cerca posible, mientras se ajusta al estándar POSIX también.

Cuando se invoca como un shell interactivo de inicio de sesión, o como un shell no interactivo con la opción --login, primero intenta leer y ejecutar comandos de /etc/profile y ~/.profile, en ese orden. La opción --noprofile puede utilizarse para inhibir este comportamiento. Cuando se invoca como un shell interactivo con el nombre sh, Bash busca la variable ENV, expande su valor si está definida, y utiliza el valor expandido como el nombre de un archivo para leer y ejecutar. Como un shell invocado como sh no intenta leer y ejecutar comandos de ningún otro archivo de inicio, la opción --rcfile no tiene efecto. Un shell no interactivo invocado con el nombre sh no intenta leer ningún otro archivo de inicio.

Si desea que bash se ejecute como sh para utilizar ~/.profile cuando no sea un shell de inicio de sesión (por ejemplo, para mantener el entorno actual) utilice

env ENV=$HOME/.profile /bin/sh

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X