.profile no está cargado en non-login / bin / sh

1

El problema está en el título, pero permítame agregar algunos detalles aquí.

Estoy ejecutando en OS X 10.10.5 (14F27) . Utilizando 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 las llamadas sh y bash

Así que aquí está la salida 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, cuando llama a sh , no carga ninguna configuración. ¿Hay algo roto en mi entorno o se espera?

    
pregunta d12frosted 01.10.2015 - 15:37

1 respuesta

6

Se espera que sh solo cargue ~ / .profile cuando es un shell de inicio de sesión.

De Manual de referencia de Bash

  

Si se invoca a Bash con el nombre sh, intenta imitar el comportamiento de inicio de las versiones históricas de sh lo más cerca posible, a la vez que también cumple con el estándar POSIX.

     

Cuando se invoca como shell de inicio de sesión interactivo, o como 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 se puede usar para inhibir este comportamiento. Cuando se invoca como shell interactivo con el nombre sh, Bash busca la variable ENV, expande su valor si está definido, y usa el valor expandido como el nombre de un archivo para leer y ejecutar. Dado que un shell invocado como sh no intenta leer y ejecutar comandos desde 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.

¿Desea que bash se ejecute como sh para usar ~ / .profile cuando no es un shell de inicio de sesión (por ejemplo, mantener el entorno actual)?

env ENV=$HOME/.profile /bin/sh
    
respondido por el Mark 01.10.2015 - 15:55

Lea otras preguntas en las etiquetas