Bash ejecuta solo ~ / .profile pero ninguno de ~ / .bash_profile y ~ / .bashrc

0

Tengo un problema extraño con bash:

Cambio mi shell predeterminado a /bin/sh desde zsh y no ejecuta ~/.bash_profile o ~/.bashrc cuando abro una nueva terminal, solo ejecuta ~/.profile .

¿Cuál podría ser el problema?

Probablemente podría obtener ~/.bashrc de ~/.profile , pero no parece una buena idea, por ejemplo. se rompería si volviera a cambiar a otra shell.

    
pregunta iosdude 26.10.2016 - 12:36

3 respuestas

2

Le sugiero que lea el manual de bash bajo el encabezado INVOCATION que dice:

   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 comienza como un shell de inicio de sesión.

    
respondido por el fd0 26.10.2016 - 14:10
0

Para que /bin/sh ejecute ~/.bashrc de la misma manera que /bin/bash , deberías hacer lo siguiente.

  1. Agregue las siguientes líneas a ~/.profile .

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

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

Para ayudar en la depuración, generalmente agrego la siguiente línea al principio del archivo ~/.profile .

export DEBUGSHELL=YES

Esta línea se puede comentar cuando se realiza la depuración, como se muestra a continuación.

#export DEBUGSHELL=YES

A continuación, agregue sentencias condicionales 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 que contenga los comandos que deben ejecutarse tanto para el inicio de sesión como para shells interactivos. Por ejemplo, aquí es donde generalmente coloco mis comandos alias . También deberá incluir la siguiente línea en sus archivos ~/.profile y ~/.bashrc .

source ~/.bashcm
    
respondido por el David Anderson 26.10.2016 - 16:32
-1

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

    
respondido por el Hamid Rohani 26.10.2016 - 13:03

Lea otras preguntas en las etiquetas