O que é o arquivo .bashrc?

92

Unix shells ao iniciar a leitura do arquivo .bashrc e executar comandos escritos nele. O que é esse arquivo e o que ele executa?

    
por pineapple 30.09.2009 / 17:54

3 respostas

61

Na verdade, é bash especificamente que lê .bashrc (e /etc/bash.bashrc ). Existem muitas conchas diferentes.

A página do bash man (de Brian Fox e Chet Ramey; também info página "Bash Startup Files" ) é a referência autoritativa:

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.

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 file name.

O arquivo é apenas comandos shell. É normalmente usado para alterar prompts, definir variáveis de ambiente e definir procedimentos de shell. Tradicionalmente, o arquivo .profile é usado para essa finalidade, mas bash tem tantas extensões que precisa de seu próprio arquivo de inicialização para usuários que desejam colocar bashisms em arquivos de inicialização.

" Não é um shell de login " significa coisas como o lançamento de scripts e geralmente janelas de terminal iniciadas por gerenciadores de janelas. Às vezes eu configuro sistemas * nix para ter .bashrc e BASH_ENV apenas a fonte .profile . Contanto que você não se desvie dos comandos shell do POSIX, você terá a mesma inicialização em qualquer shell.

É particularmente valioso quando sh é realmente bash , o que às vezes acontece. Para fazer isso, use:

. .profile

Uma das razões pelas quais isso é tão complexo é porque às vezes as pessoas colocam coisas que produzem saída em arquivos de inicialização do shell ou definem prompts incondicionalmente. Isso causa muitos problemas ao executar programas shell e comandos backtick em idiomas, sem mencionar system(3) de programas em C. A maneira como o bash é iniciado é projetado, penso eu, para ter um arquivo em que a saída e a configuração do prompt estejam OK e um arquivo não esteja. Tradicionalmente, um teste em tempo de execução seria feito para distinguir a interatividade, por exemplo, verificando se o prompt está definido.

    
por 30.09.2009 / 17:57
12

When Bash starts, it executes the commands in a variety of different scripts.

When Bash is invoked as an interactive login shell, 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.

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

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.

link

Aqui estão alguns truques e dicas:

link

Vamos tentar definir a solicitação para que possa exibir a data e o nome do host de hoje:

PS1="\d \h $ "
    
por 30.09.2009 / 17:56
9

Ele deve conter vários comandos de "inicialização" para o seu shell, por exemplo:

  • Criando aliases úteis (por exemplo, alias ll='ls -l' ).
  • Adicionando mais diretórios ao PATH.
  • Definindo novas variáveis de ambiente.
por 30.09.2009 / 17:56

Tags