2009-09-30 15:54:44 +0000 2009-09-30 15:54:44 +0000
106
106

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?

Respostas (3)

69
69
69
2009-09-30 15:57:31 +0000

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.

12
12
12
2009-09-30 15:56:30 +0000

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 $ "
10
10
10
2009-09-30 15:56:46 +0000

Deve conter vários comandos de “inicialização” para a sua shell, por exemplo:

  • Criar alias úteis (por exemplo alias ll='ls -l').
  • Adicionar mais directórios ao PATH.
  • Definir novas variáveis de ambiente.