O que é o ficheiro .bashrc?
Unix shells ao iniciar a leitura do ficheiro .bashrc
e executar comandos escritos no mesmo. O que é este ficheiro e o que é que ele executa?
Unix shells ao iniciar a leitura do ficheiro .bashrc
e executar comandos escritos no mesmo. O que é este ficheiro e o que é que ele executa?
Na verdade, é o bash
especificamente que diz .bashrc
(e /etc/bash.bashrc
). Existem muitas shells diferentes.
A bash man page (por Brian Fox e Chet Ramey; também info page “Bash Startup Files” ) é a referência autorizada:
Quando uma shell interactiva que não é uma shell de login é iniciada, bash lê e executa comandos de
~/.bashrc
, se esse ficheiro existir. Isto pode ser inibido pela utilização da opção--norc
. A opção de ficheiro--rcfile
irá forçar a bash a ler e executar comandos de ficheiro em vez de~/.bashrc
.Quando a bash é iniciada não-interactivamente, para correr um script da shell, por exemplo, procura a variável
BASH_ENV
no ambiente, expande o seu valor se aparecer lá e usa o valor expandido como nome de um ficheiro para ler e executar. O Bash comporta-se como se o seguinte comando fosse executado:if [-n "$BASH_ENV"]; then . "$BASH_ENV"; fi
mas o valor da variável
PATH
não é usado para procurar o nome do ficheiro.
O ficheiro é apenas comandos da shell. É tipicamente usado para alterar os comandos, definir variáveis de ambiente e definir procedimentos de shell. Tradicionalmente, o arquivo .profile
é usado para este propósito, mas bash
tem tantas extensões que precisa do seu próprio arquivo de inicialização para usuários que querem colocar bashisms em arquivos de inicialização.
“Não é uma shell de login” significa coisas como lançamentos de scripts e normalmente janelas de terminal iniciadas por gerenciadores de janela. Às vezes eu configuro *nix sistemas para ter .bashrc
e BASH_ENV
apenas fonte .profile
. Desde que não se desvie dos comandos da shell do POSIX então terá a mesma inicialização em qualquer shell.
É particularmente valioso quando o sh
é realmente bash
, o que por vezes acontece. Para fazer este uso:
. .profile
Uma razão pela qual tudo isto é tão complexo é porque por vezes as pessoas colocam coisas que produzem saída em ficheiros de arranque da shell, ou definem incondicionalmente as instruções. Isto causa muitos problemas ao executar programas shell e comandos backtick dentro das linguagens, para não mencionar system(3)
a partir de programas C. A forma como o bash
arranca é concebido, penso eu, para ter um ficheiro onde a saída e a definição de prompts está OK e um ficheiro onde não está. Tradicionalmente, seria feito um teste de tempo de execução para distinguir a interactividade, por exemplo, verificando se a prompt está definida.
Quando o Bash inicia, executa os comandos numa variedade de scripts diferentes.
Quando o Bash é invocado como uma shell de login interactivo, lê e executa primeiro comandos do ficheiro /etc/profile, se esse ficheiro existir. Depois de ler esse ficheiro, procura ~/.bash_profile, ~/.bash_login e ~/.profile, por essa ordem, e lê e executa comandos a partir do primeiro que existe e que é legível.
Quando uma shell de login sai, o Bash lê e executa comandos do ficheiro ~/.bash_logout, se este existir.
Quando uma shell interactiva que não é uma shell de login é iniciada, o Bash lê e executa comandos de ~/.bashrc, se este ficheiro existir. Isto pode ser inibido pela utilização da opção –norc. A opção –rc file force o Bash a ler e executar comandos a partir de um ficheiro em vez de ~/.bashrc. 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 configurar o prompt para que ele possa mostrar a data e o hostname de hoje:
PS1="\d \h $ "
Deve conter vários comandos de “inicialização” para a sua shell, por exemplo:
alias ll='ls -l'
).