Quando o /etc/bash.bashrc é chamado?

6

O que é esse arquivo, afinal? A Documentação não menciona isso. E não é para ser executado automaticamente (versão 4.3 , 2 de fevereiro de 2014):

Invoked as an interactive login shell, or with --login

When Bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.

When a login shell exits, Bash reads and executes commands from the file ~/.bash_logout, if it exists.

Invoked as an interactive non-login shell

When an interactive shell that is not a login shell is started, Bash reads and executes commands from ~/.bashrc, if that file exists. This may be inhibited by using the --norc option. The --rcfile file option will force Bash to read and execute commands from file instead of ~/.bashrc.

So, typically, your ~/.bash_profile contains the line

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi

after (or before) any login-specific initializations.

Invoked non-interactively

When Bash is started non-interactively, to run a shell script, for example, it looks for the variable BASH_ENV in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to read and execute. Bash behaves as if the following command were executed:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

but the value of the PATH variable is not used to search for the filename.

As noted above, if a non-interactive shell is invoked with the --login option, Bash attempts to read and execute commands from the login shell startup files.

    
por x-yuri 28.02.2015 / 14:00

3 respostas

7

Em bash README :

do Debian
  1. What is /etc/bash.bashrc? It doesn't seem to be documented.

    The Debian version of bash is compiled with a special option (-DSYS_BASHRC) that makes bash read /etc/bash.bashrc before ~/.bashrc for interactive non-login shells. So, on Debian systems, /etc/bash.bashrc is to ~/.bashrc as /etc/profile is to ~/.bash_profile.

    
por 28.02.2015 / 14:07
1

De man bash :

When an interactive shell that is not a login shell is started, bash reads and executes commands from /etc/bash.bashrc and ~/.bashrc, if these files exist. This may be inhibited by using the --norc option. The --rcfile file option will force bash to read and execute commands from file instead of /etc/bash.bashrc and ~/.bashrc.

A documentação que você cita não parece estar atualizada.

    
por 28.02.2015 / 14:07
1

Tecnicamente, /etc/bash.bashrc é invocado para shells bash interativos e não-login para todos os usuários.

No entanto, geralmente /etc/profile (que é chamado para todos os shells de login) chama /etc/bash.bashrc também. Isso significa que /etc/bash.bashrc também é chamado para todos os shells de logins.

No entanto, a primeira linha geralmente verifica a saída se não for interativa.

Então, no final, efetivamente /etc/bash.bashrc é executado para todos os shells interativos do bash (login e não-login). Pense nisso como o ~/.bashrc

do sistema     
por 22.09.2017 / 19:42