0 votos

Bash ejecuta sólo ~/.profile pero ninguno de ~/.bash_profile y ~/.bashrc

Tengo un extraño problema con bash:

Cambio mi shell por defecto a /bin/sh desde zsh y no se ejecuta ~/.bash_profile o ~/.bashrc cuando abro una nueva terminal, sólo se ejecuta ~/.profile .

¿Cuál puede ser el problema?

Probablemente podría conseguir ~/.bashrc de ~/.profile pero eso no parece una buena idea, por ejemplo, se rompería si vuelvo a cambiar a otro shell.

2voto

Michael Zhou Puntos 167

Le sugiero que lea el bash manual bajo el epígrafe INVOCATION que establece:

   If bash is invoked with the name sh, it tries to mimic the startup behavior of historical versions of sh as  closely
   as  possible, while conforming to the POSIX standard as well.  When invoked as an interactive login shell, or a non-
   interactive shell with the --login option, it first attempts to read and  execute  commands  from  /etc/profile  and
   ~/.profile,  in that order.  The --noprofile option may be used to inhibit this behavior.  When invoked as an inter-
   active shell with the name sh, bash looks for the variable ENV, expands its value if it is  defined,  and  uses  the
   expanded  value as the name of a file to read and execute.  Since a shell invoked as sh does not attempt to read and
   execute commands from any other startup files, the --rcfile option has no effect.  A non-interactive  shell  invoked
   with the name sh does not attempt to read any other startup files.  When invoked as sh, bash enters posix mode after
   the startup files are read.

Una nueva sesión de terminal en OS X/MacOS siempre se inicia como un shell de inicio de sesión.

0voto

David Anderson Puntos 2189

Para conseguir /bin/sh para ejecutar ~/.bashrc de la misma manera /bin/bash hace, tendría que hacer lo siguiente.

  1. Añade las siguientes líneas a ~/.profile .

    LOGINSHELL=YES
    export ENV=~/.shrc
  2. Crear el archivo ~/.shrc que contiene la siguiente línea.

    if [ "$LOGINSHELL" != "YES" ]; then  source ~/.bashrc; fi

Para ayudar a la depuración, suelo añadir la siguiente línea al principio del ~/.profile archivo.

export DEBUGSHELL=YES

Esta línea puede ser comentada cuando se termine de depurar, como se muestra a continuación.

#export DEBUGSHELL=YES

A continuación, añada la condición echo al principio y al final de los archivos como ~/.profile , ~/.bashrc , ~/.shrc y otros. Por ejemplo, ~/.shrc contendría lo siguiente.

if [ "$DEBUGSHELL" = "YES" ]; then echo entered .shrc; fi
if [ "$LOGINSHELL" != "YES" ]; then  source ~/.bashrc; fi
if [ "$DEBUGSHELL" = "YES" ]; then echo exited .shrc; fi

Otra idea, que puede ser útil, es crear un archivo ~/.bashcm para contener los comandos que deben ser ejecutados tanto para el login como para los shells interactivos. Por ejemplo, aquí es donde suelo colocar mi alias comandos. También tendrá que incluir la siguiente línea en ambos ~/.profile y ~/.bashrc archivos.

source ~/.bashcm

-1voto

Hamid Rohani Puntos 359

/bin/sh no es bash . Es Bourne Shell. La ubicación de Bash (Bourne Again Shell) es /bin/bash . Cambia tu shell por defecto a bash para utilizar ~/.bash_profile en lugar de ~/.profile

0 votos

/bin/sh en OSX es bash pero intenta 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. (de otra respuesta)

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