Qual é a diferença entre ~ / .profile e ~ / .bash_profile?

Respostas:

44

O .profilefoi a configuração do perfil original para o shell Bourne (aka, sh). bash, sendo um shell compatível com Bourne, ele será lido e utilizado. Por .bash_profileoutro lado, é lido apenas por bash. Destina-se a comandos incompatíveis com o shell Bourne padrão.

bahamat
fonte
Se estiver errado, corrija-me ... .profile é usado por qualquer shell compatível com Bourne, enquanto .bash_profile é usado apenas pelo bash .. estou certo?
lakesh
2
@lakesh: Sim, qualquer shell que for compatível com bourne será lido .profile. Por exemplo, bashe kshmas não cshou tcsh. E zshfornece ambos she cshcompatibilidade para que ele leia ambos .profilee .login, assim como zsharquivos de pontos específicos.
bahamat
Existe algum tutorial para ler essas coisas do bash e do ksh? nunca ouviu falar destes antes ...
lakesh
4
Você pode começar com o histórico do shell UNIX .
bahamat
25

O original foi shoriginado .profilena inicialização.

bashtentará originar .bash_profileprimeiro, mas se isso não existir, ele origina .profile1 .

Observe que, se bashiniciado como sh(por exemplo, /bin/shum link para /bin/bash) ou iniciado com o --posixsinalizador, ele tenta emular she apenas lê .profile.

Notas de rodapé:

  1. Na verdade, o primeiro de .bash_profile, .bash_login,.profile

Veja também:

Mikel
fonte
2
Impressionante .. Obrigado ... especialmente para as referências ...
lakesh
10

Você sabe que existem muitos shells no mundo UNIX, mas a maioria deles é:

  • Bourne shell : /bin/sh(Inventor: Stephen Bourne)
  • BASH (Bourne Again Shell): /bin/bash(Inventor: Brian Fox, sob o projeto GNU) (shell poderoso)
  • Shell C : /bin/csh(Inventor: Bill Joy, Inventor da pilha TCP / IP)
  • Korn shell : /bin/ksh(Inventor: David Korn no Bell Labs)
  • Escudo Z : /bin/zsh(Escudo poderoso)
  • Shell TENEX C : /bin/tcsh(derivado de Shell C)
  • Shell Debian Almquist : /bin/dash(Derivado da shell Almquist (ash no projeto NetBSD)) (Dash nascido de lenny)

Mas sua pergunta é sobre ~/.bash_profilee ~/.profile:

Quando você faz login em uma máquina UNIX, ela é redirecionada para o diretório inicial, de acordo com o shell escolhido por um administrador no último campo /etc/passwd, como:

mohsen:x:1000:1000:Mohsen Pahlevanzadeh,,,:/home/mohsen:/bin/bash

Seu shell é executado e, por padrão, cada shell possui um arquivo definido para logine logout. Quando você logar em bash, ~/.profileé executado e quando você logout, ~/.bash_logouté executado. ~/.bash_historyO arquivo mantém seu comando de entrada.

Arquivo de inicialização em cada shell

Concha TENEX C

  • ~/.login Quando você entra
  • ~/.logout Quando você se desconecta
  • ~/.tcshrcmesmo que ~./bashrcno bash

Você pode definir variável $histfilecomo nome do arquivo de histórico e variável $historycomo número de comandos a serem mantidos.

Z shell

Na verdade, é um shell poderoso e, se você tiver tempo livre, certifique-se de migrar para ele.

Exceto em outros shell, o shell Z tem muitos arquivos de configuração e arquivos de inicialização, apenas escrevo:

$ZDOTDIR/.zshenv
$ZDOTDIR/.zprofile
$ZDOTDIR/.zshrc
$ZDOTDIR/.zlogin
$ZDOTDIR/.zlogout
/tmp/zsh*
/etc/zshenv
/etc/zprofile
/etc/zshrc
/etc/zlogin

Nota: se $ZDOTDIRnão estiver definido, ajuste para casa.

C shell

Nota: O shell TENEX C foi bifurcado no shell C. C shell suporta por BSD. Se você está familiarizado com a programação em linguagem C, deve se sentir confortável, pois sua sintaxe é semelhante.

~/.login
~/.cshrc
~/.logout

Nota: csh é antigo. Use o tcsh.

Korn Shell

  • ~/.profile
  • arquivo rc: definido pelo usuário
  • arquivo de logout: N / A

Bourne Novamente SHELL (BASH)

É uma concha muito poderosa e nasceu no projeto GNU e bifurcada pela Bourne Shell.

~/.bash_login
~/.bash_logout
~/.bashrc
~/.bash_profile
~/.bash_history

Quando você faz login, o bash é executado ~/.bash_profilee ~/.bash_profileexecutado ~/.bashrc. Na verdade, ~/.bashrcnão é um arquivo de inicialização do bash, porque o bash não o executa.

Casca de Bourne

Está morto. Mesmo quando você usa man sh, você vê o manual de dash. [Nota do editor: o pouco dashse aplica apenas a distribuições baseadas no Debian e no Debian como o Ubuntu.]

sua resposta

~/.bash_profiletrabalhar sob bash, mas ~/.profiletrabalhar sob Bourne e Korn shell.

PersianGulf
fonte
2
Chet Ramey foi o principal desenvolvedor do Bash.
Tripleee
4

Um shell de logon é simplesmente um shell no qual você pode fazer o login via ssh ou no console. Um shell sem login é um shell em que alguém também não pode entrar. Um shell sem login é frequentemente usado por programas / serviços do sistema.

Quanto ao seu terceiro ponto. É verdade que .bashrcé executado em cada instância do shell. No entanto, .bash_profileé usado apenas no login. Assim, o motivo dos dois arquivos separados.

.profileé para itens que não estão especificamente relacionados ao Bash, como as variáveis ​​de ambiente $ PATH, que também devem estar disponíveis a qualquer momento. .bash_profileé especificamente para shells de login ou shells executados no login.

anzenketh
fonte
diferença entre ~ / .profile e ~ / .bash_profile?
lakesh
2
.profile é para coisas que não estão especificamente relacionadas ao Bash, como as variáveis ​​de ambiente PATH, que também devem estar disponíveis a qualquer momento. .bash_profile é especificamente para shells de login ou shells executados no login.
precisa saber é o seguinte
acrescentar que declaração para a sua resposta .... cos que o que é a minha pergunta é ....
lakesh
Hã? Isso nem responde à pergunta?
21412 Mikel