Estou usando o Linux Mint. Meu shell de login (cat /etc/passwd | grep myUserName) é bash. 
 Depois de iniciar meu ambiente de área de trabalho gráfico e executar um emulador de terminal a partir dele, posso ver que .bash_profile não tem origem (variáveis de ambiente que são export ed nele estão indefinidos). Mas se eu logar em um console de texto ( ctrl  +  alt  +  F1 ) ou executar manualmente bash -l do emulador de terminal, .bash_profile funciona bem. 
 Estou errado quando penso que .bash_profile deve ser fornecido quando o X é iniciado e todos os export “vars devem estar disponíveis no terminal, em execução no X? 
 PS Colocar tudo em .bashrc e obtê-lo em .bash_profile não é uma boa ideia ( https://stackoverflow.com/questions/902946/ ): o material do ambiente deve ser fornecido apenas uma vez. 
Resposta
 O arquivo ~/.bash_profile é lido pelo bash quando é um shell de login. Isso é o que você obtém quando faz login no modo de texto. 
 Quando você faz login no X, os scripts de inicialização são executados por /bin/sh. No Ubuntu e Mint, /bin/sh é  traço , não bash. Dash e bash têm os mesmos recursos básicos, mas o traço mantém esses recursos principais para ser rápido e pequeno, enquanto o bash adiciona muitos recursos ao custo de exigir mais recursos. É comum usar o dash para scripts que não precisam de recursos extras e o bash para uso interativo (embora  zsh   tem muitos recursos mais interessantes ). 
 A maioria das combinações de exibição gerenciador (o programa em que você digita seu nome de usuário e senha) e o ambiente de área de trabalho lê ~/.profile nos scripts de login em /etc/X11/Xsession, /usr/bin/lightdm-session, /etc/gdm/Xsession ou o que for aplicável. Portanto, coloque suas definições de variável de ambiente em ~/.profile. Certifique-se de usar apenas sintaxe compatível com o traço. 
Então, o que você deve colocar onde?
- 
Um bom .bash_profilecarrega.profilee carrega.bashrcse o shell for interativo.. ~/.profile if [[ $- == *i* ]]; then . ~/.bashrc; fi
- 
Em .profile, coloque as definições de variáveis de ambiente e outras configurações de sessão, comoulimit.
-  Em .bashrc, coloque as configurações interativas do bash como apelidos, funções, conclusão, combinações de teclas (que não estão em.inputrc),…
Veja também Diferença entre Shell de login e Shell de não login? e Alternativa para .bashrc .
Comentários
- muitas coisas aprendidas com uma única resposta: )
- mesmo .profile não ‘ funciona no Debian 10 ” Buster “, apenas .bashrc wor ks
Resposta
 .bash_profile é o script de configuração de inicialização de bash. Não existe um padrão que obrigue X a fornecer .bash_profile. 
 O que você está pensando é antes .profile. Originalmente, era o arquivo de configuração de inicialização do shell bourne (sh). Hoje, muitas distribuições têm seu ambiente de trabalho configurado para fonte .profile. Observe que isso também não é um padrão, mas parece ser uma convenção. 
 O Debian costumava fornecer .profile no login gráfico ( página wiki em 2013 ) agora não ( página wiki em 2016 ). 
 Fontes do Arch .xprofile no login gráfico ( página wiki em 2013 ). 
 Ubuntu costumava desencorajar o uso de .profile ( página wiki em 2013 ) agora não desanima mais ( página wiki de 2016 ). 
Em relação à sua outra pergunta: Por que meu ~ / .bash_profile não funciona? Esse é o comportamento esperado.
O comportamento, em resumo, é o seguinte:
-  bash iniciado como um shell de login interativo: lê ~/.profile
-  bash começou como um shell interativo sem login: lê ~/.bashrc
Para obter mais detalhes, consulte minha resposta a um símile ar question no askubuntu: https://askubuntu.com/questions/132276/configure-gnome-terminal-to-start-bash-as-a-login-shell-doesnt-read-bashrc/132319#132319
Comentários
-  Parte disso está correto, mas“ sempre leia ~/.bashrc”é um conselho ruim: você deve apenas ler.bashrca partir de um shell interativo .Você ‘ perdeu o principal problema aqui que é que ao fazer login no X, não há instância de login do bash (na maioria das combinações de gerenciador de exibição / ambiente de área de trabalho, incluindo evidentemente AntonioK ‘ s).
-  Obrigado por seus comentários. Espero ter atualizado minha resposta o suficiente para resolver suas reclamações. Em relação ao meu conselho para “, sempre leia .bashrc“, sempre quis dizer para um shell interativo . Eu esclareci essa parte. Espero que não seja mais enganoso.
-  ”  O Ubuntu desencoraja especificamente o uso de .profile( link ) ” O wiki uma vez (absurdamente) desencorajou isso; que ‘ s foram corrigidos. (Observe que/etc/profilepermanece desencorajado para atribuições em todo o sistema, em preferência para adicionar scripts a/etc/profile.d.) Por usuário.profileos arquivos agora são apresentados como uma das maneiras recomendadas para definir variáveis de ambiente por usuário: ” Arquivos adequados para configurações de variáveis de ambiente que devem afetar apenas um usuário específico ( em vez do sistema como um todo) são ~ / .pam_environment e ~ / .profile . ”
-  A página vinculada sobre o Debian especifica que o Debian  não  lê ~/.profilepara login gráfico e~/.xsessionrcdeve ser usado em seu lugar.
- obrigado por notar. a página wiki foi atualizada. Eu vinculei as versões como estavam no momento da resposta.
Resposta
Alguns problemas surgem quando tentando recarregar o arquivo / source ~ / .profile. [Isso se refere ao Ubuntu Linux – em alguns casos, os detalhes dos comandos serão diferentes]
- Você está executando isso diretamente no terminal ou em um script?
- Como fazer você executa isso em um script?
Anúncio. 1)
Executar isso diretamente no terminal significa que não haverá subshell criado. Portanto, você pode usar dois comandos:
source ~/.bash_profile ou
. ~/.bash_profile Em ambos os casos isso atualizará o ambiente com o conteúdo do arquivo .profile.
Anúncio 2) Você pode iniciar qualquer script bash chamando
sh myscript.sh ou
. myscript.sh No primeiro caso, isso criará um subshell que não afetará as variáveis de ambiente de seu sistema e eles serão visíveis apenas para o processo de subshell. Depois de terminar o comando de subshell, nenhuma das exportações, etc. será aplicada. ESTE É UM ERRO COMUM E FAZ COM QUE MUITOS DESENVOLVEDORES PERDEM MUITO TEMPO.
Para que suas alterações aplicadas em seu script tenham efeito para o ambiente global, o script deve ser executado com o comando
.myscript.sh .
Para garantir que seu script não seja executado em um subshel você pode usar esta função. (Novamente, o exemplo é para o shell do Ubuntu)
#/bin/bash preventSubshell(){ if [[ $_ != $0 ]] then echo "Script is being sourced" else echo "Script is a subshell - please run the script by invoking . script.sh command"; exit 1; fi } Espero que isso elimine alguns dos mal-entendidos comuns! : D Boa sorte!
Resposta
Em sua pergunta, você se refere a https://stackoverflow.com/questions/902946/ como recomendação de não fornecer, quando a resposta aceita prescreve para
- Coloque minha configuração PATH em um arquivo .profile (porque às vezes eu uso outros shells)
- Coloque meus aliases e funções Bash no meu. arquivo bashrc
Em seguida, use este [EDITADO: comentários de código de recorte]:
.bash_profile:#!/bin/bash # echo "Loading ${HOME}/.bash_profile" source ~/.profile # Get the paths source ~/.bashrc # get aliases
 Colocar tudo em .profile fez não funciona para mim no Linux Mint. Usar .bashrc funcionou bem. 
Resposta
A solução simples é fazer o terminal um terminal de login. Para o terminal Gnome em “Bloco e comando” do perfil padrão, você pode marcar a caixa “Executar comando como shell de login”. Este artigo explica a diferença entre um shell de login e outro que não é.