Você não costuma ter .bash_profile
no Ubuntu, nem deveria geralmente criar esse arquivo. Como jpezz diz , ele estaria no seu diretório home no seu sistema Ubuntu, que é o que ~
significa para, e você pode criá-lo lá. Mas se você fizer isso, você deve ter cuidado, porque ele irá evitar bash
de executar automaticamente os comandos em .profile
- o que você quase certamente faz tem.
Quando bash
é executado como um shell de login , em WSL ou de outra forma 1 , ele executa o primeiro de .bash_profile
, .bash_login
ou .profile
que existe em seu diretório pessoal. Se você tiver os comandos bash
-specific que deseja executar ao efetuar login, mas somente quando bash
for o seu shell, você poderá colocá-los em .bash_profile
. Mas a mera existência de .bash_profile
impediria que .profile
fosse usado.
Então, você gostaria de source .profile
de .bash_profile
, supondo você queria que esses comandos fossem executados também, o que você quase sempre faria. Você poderia fazer isso colocando este comando em .bash_profile
:
. ~/.profile
(Alguns leitores podem estar acostumados a ver isso escrito como . "$HOME/.profile"
quando ele aparece em um script de inicialização. Isso é sempre bom - e você pode preferir usar isso para comandos que precisam trabalhar em shells diferentes de bash
também, se você precisar acomodar shells extremamente antigas que não suportam os recursos padrão , qual - bem, você não precisa disso. Em qualquer caso, bash
sempre suporta expansão do til e o ponto de .bash_profile
é que somente bash
executa comandos a partir dele, então . ~/.profile
está bem.)
O .
embutido origina um arquivo, o que significa que ele executa todos os comandos do arquivo no shell atual. Abra um bash
shell interativo e execute help .
para obter mais informações.
O motivo pelo qual você normalmente não tem .bash_profile
no Ubuntu, mesmo se você tiver bash
-específicos que você quer executar no login é que, por padrão, os usuários ' .profile
arquivos contêm código que verifica se o shell atual é bash
, então faz com que tais comandos sejam executados.
Há outra resposta para a pergunta de onde arquivos como .profile
ou .bash_profile
são. As versões padrão desses arquivos existem no diretório /etc/skel
. Os arquivos desse diretório são copiados para os diretórios iniciais do Ubuntu quando as contas de usuários são criadas em um sistema Ubuntu - incluindo a conta de usuário que você cria como parte da instalação do Ubuntu. Se você olhar nesse diretório, notará que existe um arquivo chamado .profile
- bem como alguns outros arquivos como .bashrc
- mas não há um arquivo chamado .bash_profile
. É por isso que - ou, realmente, como - não existe .bash_profile
em seu diretório pessoal do Ubuntu, a menos que você mesmo tenha criado.
Finalmente, você deve não colocar aliases em .profile
, nem .bash_profile
é um bom lugar para eles, como geirha diz com razão . Isso porque você desejará que seus aliases funcionem em shells interativos, independentemente de serem ou não shells de login. Em vez disso, defina seus alias em .bashrc
ou, melhor, .bash_aliases
(como guest boeroe aponta ), que o padrão .bashrc
sources. Veja Como faço para criar um alias de Bash permanente?
O arquivo .profile
padrão verificará se você está executando um .bash
shell e a origem .bashrc
se você estiver:
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Enquanto isso, o padrão .bashrc
será encerrado no topo sem fazer nada se for executado em um shell não interativo, portanto, os comandos nele não serão executados se forem obtidos por .profile
em um non -interactive shell de login e em outros cenários mais obscuros 2 :
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
Portanto, se você colocar aliases em .bashrc
ou em .bash_aliases
, você os obterá para shells de login interativos (onde .profile
é usado), além de shells interativos que não são de login (onde .bashrc
é usado). Isso é o que você quer. Apenas não coloque nada acima da verificação de interatividade, a menos que você realmente, realmente saiba o que está fazendo.
1 Esta resposta foi originalmente escrita para uma questão relacionada à WSL , mas essa questão foi encerrada como uma duplicata e esta resposta se aplica totalmente aqui também, então eu expandi um pouco e a publiquei aqui em vez disso.
2 Quando bash
detecta que provavelmente está sendo executado como o shell inicial de um login remoto que não é um shell de login -como quando você usa ssh
para executar um único comando em um máquina remota - executa comandos de .bashrc
. (Veja 6.2 Arquivos de Inicialização Baseada no Manual do GNU Bash .)