web-dev-qa-db-fra.com

Quelle est la différence entre ~ / .profile et ~ / .bash_profile?

Quelle est la différence entre ~/.profile et ~/.bash_profile?

71
lakesh

Le .profile était la configuration de profil d'origine du Bourne Shell (a.k.a., sh). bash, étant un shell compatible Bourne le lira et l'utilisera. Le .bash_profile en revanche n'est lu que par bash. Il est destiné aux commandes incompatibles avec le Bourne Shell standard.

53
bahamat

Le sh d'origine .profile au démarrage.

bash essaiera de source .bash_profile d'abord, mais si cela n'existe pas, il source .profile1.

Notez que si bash est démarré en tant que sh (par exemple /bin/sh est un lien vers /bin/bash) ou démarre avec le --posix flag, il essaie d'émuler sh, et lit seulement .profile.

Notes de bas de page:

  1. En fait, le premier de .bash_profile, .bash_login, .profile

Voir également:

27
Mikel

Vous savez que de nombreux shells existent dans le monde UNIX, mais la plupart d'entre eux sont:

  • Bourne Shell: /bin/sh (Inventeur: Stephen Bourne)
  • BASH (Bourne Again Shell): /bin/bash (Inventeur: Brian Fox, sous GNU) (Shell puissant)
  • Shell C: /bin/csh (Inventeur: Bill Joy, inventeur de la pile TCP/IP)
  • Korn Shell: /bin/ksh (Inventeur: David Korn sous Bell Labs)
  • Coque Z: /bin/zsh (Shell puissant)
  • Shell TENEX C: /bin/tcsh (dérivé de C Shell)
  • Debian Almquist Shell: /bin/dash (Dérivé d'Almquist Shell (cendre sous le projet NetBSD)) (Dash né de lenny)

Mais votre question concerne ~/.bash_profile et ~/.profile:

Lorsque vous vous connectez à une machine UNIX, celle-ci redirige vers votre répertoire personnel, selon le Shell choisi par un administrateur dans le dernier champ de /etc/passwd tel que :

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

Votre Shell s'exécute et, par défaut, chaque Shell a un fichier défini pour login et logout. Lorsque vous vous connectez sur bash, ~/.profile est exécuté et lorsque vous logout, ~/.bash_logout est exécuté. ~/.bash_history le fichier conserve votre commande d'entrée.

Fichier d'initialisation dans chaque shell

Coque TENEX C

  • ~/.login Lorsque vous vous connectez
  • ~/.logout Lorsque vous vous déconnectez
  • ~/.tcshrc pareil que ~./bashrc en bash

Vous pouvez définir la variable $histfile comme nom de fichier d'historique et variable $history comme nombre de commandes à conserver.

Coque Z

En effet, c'est un Shell puissant et si vous avez du temps libre, assurez-vous d'y migrer.

À l'exception des autres Shell, Z Shell a de nombreux fichiers de configuration et d'initialisation, j'écris juste:

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

Remarque: si $ZDOTDIR unset, home set.

C Shell

Remarque: TENEX C Shell est issu de C Shell. C Shell prend en charge par BSD. Si vous connaissez la programmation en langage C, vous devriez être à l'aise car sa syntaxe est similaire.

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

Remarque: csh est ancien. Utilisez plutôt tcsh.

Korn Shell

  • ~/.profile
  • fichier rc: défini par l'utilisateur
  • fichier de déconnexion: N/A

Bourne Again Shell (BASH)

C'est un shell très très puissant et né sous GNU et forké par Bourne Shell.

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

Lorsque vous vous connectez, bash exécute ~/.bash_profile et ~/.bash_profile s'exécute ~/.bashrc. En effet ~/.bashrc n'est pas un fichier d'initialisation bash, car bash ne l'exécute pas.

Bourne Shell

C'est mort. Même lorsque vous utilisez man sh, vous voyez le manuel de dash. [Note de l'éditeur: le bit sur dash ne s'applique qu'à Debian et aux distributions basées sur Debian comme Ubuntu.]

Ta Réponse

~/.bash_profile fonctionne sous bash, mais ~/.profile travail sous Bourne et Korn Shell.

11
PersianGulf

Un Shell de connexion est simplement un Shell auquel vous pouvez vous connecter via ssh ou sur la console. Un Shell sans connexion est un Shell auquel quelqu'un ne peut pas se connecter également. Un shell sans connexion est souvent utilisé par les programmes/services système.

Quant à votre troisième point. C'est vrai .bashrc est exécuté sur chaque instance du Shell. Cependant .bash_profile n'est utilisé que lors de la connexion. D'où la raison des deux fichiers distincts.

.profile est pour les choses qui ne sont pas spécifiquement liées à Bash, comme les variables d'environnement $ PATH, elle devrait également être disponible à tout moment. .bash_profile est spécifiquement pour les shells de connexion ou les shells exécutés lors de la connexion.

5
anzenketh