Quando um shell interativo que não é um shell de login é iniciado, o bash lê e executa comandos de ~/.bashrc, se esse arquivo existir. Isso pode ser inibido usando a --norcopção A --rcfileopção file forçará o bash a ler e executar comandos do arquivo em vez de ~/.bashrc.
Quando o bash é iniciado de maneira não interativa, para executar um script de shell, por exemplo, ele procura a variável BASH_ENVno ambiente, expande seu valor se aparecer lá e usa o valor expandido como o nome de um arquivo para ler e executar. O Bash se comporta como se o seguinte comando tivesse sido executado:
if[-n "$BASH_ENV"];then."$BASH_ENV";fi
mas o valor da PATHvariável não é usado para procurar o nome do arquivo.
O arquivo é apenas comandos de shell. É normalmente usado para alterar prompts, definir variáveis de ambiente e definir procedimentos de shell. Tradicionalmente, o arquivo .profileé usado para esse fim, mas bashtem tantas extensões que precisa de seu próprio arquivo de inicialização para usuários que desejam colocar bashisms nos arquivos de inicialização.
" Não é um shell de login " significa coisas como o lançamento de scripts e, geralmente, janelas de terminal iniciadas pelos gerenciadores de janelas. Às vezes eu configuro sistemas * nix para ter .bashrce BASH_ENVapenas fonte .profile. Contanto que você não se desvie para fora dos comandos do shell POSIX, obterá a mesma inicialização em qualquer shell.
É particularmente valioso quando shé realmente bash, o que às vezes acontece. Para fazer isso, use:
..profile
Uma razão pela qual tudo é tão complexo é porque, às vezes, as pessoas colocam coisas que produzem saída nos arquivos de inicialização do shell ou definem avisos incondicionalmente. Isso causa muitos problemas ao executar programas de shell e comandos de backtick em idiomas, sem mencionar os system(3)programas em C. A maneira como a bashinicialização foi projetada, eu acho, para ter um arquivo em que a saída e a configuração do prompt estão OK e um arquivo em que não está. Tradicionalmente, um teste em tempo de execução seria feito para distinguir a interatividade, por exemplo, verificando se o prompt está definido.
Boa resposta. Apenas algumas citações: O arquivo é apenas comandos shell. É normalmente usado para alterar prompts, definir variáveis de ambiente e definir procedimentos de shell.
smwikipedia
2
Alguém sabe o que a parte rc de .bashrc / .zshrc significa?
Talvez rc signifique configuração de tempo de execução.
Mike Diehn
12
Quando o Bash é iniciado, ele executa os comandos em uma variedade de scripts diferentes.
Quando o Bash é chamado como um shell de login interativo, ele primeiro lê e executa comandos do arquivo / etc / profile, se esse arquivo existir. Depois de ler esse arquivo, ele procura ~ / .bash_profile, ~ / .bash_login e ~ / .profile, nessa ordem, e lê e executa comandos do primeiro que existe e é legível.
Quando um shell de login sai, o Bash lê e executa comandos do arquivo ~ / .bash_logout, se existir.
Quando um shell interativo que não é um shell de login é iniciado, o Bash lê e executa comandos de ~ / .bashrc, se esse arquivo existir. Isso pode ser inibido usando a opção --norc. A opção --rcfile file forçará o Bash a ler e executar comandos do arquivo em vez de ~ / .bashrc.
@ abacaxi: Um alias é uma maneira de executar um comando, que pode ser longo, com um mais curto. Por exemplo, o alias ll='ls -l'permite digitar llpara executar o ls -lcomando.
Respostas:
Na verdade, é
bash
especificamente o que lê.bashrc
(e/etc/bash.bashrc
). Existem muitas conchas diferentes.A página de manual do bash (de Brian Fox e Chet Ramey; também a página de informações "Bash Startup Files" ) é a referência autorizada:
O arquivo é apenas comandos de shell. É normalmente usado para alterar prompts, definir variáveis de ambiente e definir procedimentos de shell. Tradicionalmente, o arquivo
.profile
é usado para esse fim, masbash
tem tantas extensões que precisa de seu próprio arquivo de inicialização para usuários que desejam colocar bashisms nos arquivos de inicialização." Não é um shell de login " significa coisas como o lançamento de scripts e, geralmente, janelas de terminal iniciadas pelos gerenciadores de janelas. Às vezes eu configuro sistemas * nix para ter
.bashrc
eBASH_ENV
apenas fonte.profile
. Contanto que você não se desvie para fora dos comandos do shell POSIX, obterá a mesma inicialização em qualquer shell.É particularmente valioso quando
sh
é realmentebash
, o que às vezes acontece. Para fazer isso, use:Uma razão pela qual tudo é tão complexo é porque, às vezes, as pessoas colocam coisas que produzem saída nos arquivos de inicialização do shell ou definem avisos incondicionalmente. Isso causa muitos problemas ao executar programas de shell e comandos de backtick em idiomas, sem mencionar os
system(3)
programas em C. A maneira como abash
inicialização foi projetada, eu acho, para ter um arquivo em que a saída e a configuração do prompt estão OK e um arquivo em que não está. Tradicionalmente, um teste em tempo de execução seria feito para distinguir a interatividade, por exemplo, verificando se o prompt está definido.fonte
http://en.wikipedia.org/wiki/Bash_(Unix_shell)
Aqui estão alguns truques e dicas:
http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html
Vamos tentar definir o prompt para que ele possa exibir a data e o nome do host de hoje:
fonte
.profile
depois.bash_profile
? Alguma lógica?Ele deve conter vários comandos de "inicialização" para o seu shell, por exemplo:
alias ll='ls -l'
).fonte
ll='ls -l'
permite digitarll
para executar ols -l
comando.