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 .)