Was ist der Unterschied zwischen ~ / .profile und ~ / .bash_profile?

Antworten:

44

Dies .profilewar die ursprüngliche Profilkonfiguration für die Bourne-Shell (aka, sh). bashAls Bourne-kompatible Shell wird sie gelesen und verwendet. Die .bash_profilehingegen wird nur von gelesen bash. Es ist für Befehle gedacht, die nicht mit der Standard-Bourne-Shell kompatibel sind.

Bahamat
quelle
Wenn ich falsch liege, korrigiere mich. .Profile wird von jeder Bourne-kompatiblen Shell verwendet, während .bash_profile nur von bash verwendet wird.
Lakesh
2
@lakesh: Ja, jede Shell, die Borowski-Kompatibilität bietet, liest .profile. ZB bashund kshdoch nicht cshoder tcsh. Und zshbietet beides shund cshKompatibilität, sodass sowohl .profileund .loginals auch zshbestimmte Punktedateien gelesen werden können.
Bahamat
Gibt es ein Tutorial, um sich über dieses Bash- und Ksh-Zeug zu informieren?
Noch
4
Sie können mit dem UNIX-Shell-Verlauf beginnen .
Bahamat
25

Das Original shstammt .profilebeim Start.

bashwird versuchen, .bash_profilezuerst zu beschaffen , aber wenn das nicht existiert, wird es .profile1 beschaffen .

Beachten Sie, dass beim bashStarten als sh(z. B. /bin/shals Link zu /bin/bash) oder beim Starten mit dem --posixFlag versucht wird, zu emulieren sh, und nur gelesen wird .profile.

Fußnoten:

  1. Eigentlich ist die erste von .bash_profile, .bash_login,.profile

Siehe auch:

Mikel
quelle
2
Super .. Danke ... vor allem für die Hinweise ...
Lakesh
10

Sie wissen, dass es in der UNIX-Welt viele Shells gibt, aber die meisten davon sind:

  • Bourne-Shell : /bin/sh(Erfinder: Stephen Bourne)
  • BASH (Bourne Again Shell): /bin/bash(Erfinder: Brian Fox, unter GNU-Projekt) (leistungsstarke Shell)
  • C-Shell : /bin/csh(Erfinder: Bill Joy, Erfinder des TCP / IP-Stacks)
  • Korn-Shell : /bin/ksh(Erfinder: David Korn unter Bell Labs)
  • Z-Shell : /bin/zsh(Leistungsstarke Shell)
  • TENEX C-Shell : /bin/tcsh(abgeleitet von C-Shell)
  • Debian Almquist-Shell : /bin/dash(Abgeleitet von Almquist-Shell (Ash unter NetBSD-Projekt)) (Dash von Lenny geboren)

Aber Ihre Frage betrifft ~/.bash_profileund ~/.profile:

Wenn Sie sich bei einem UNIX-Computer anmelden, wird die Weiterleitung in Ihr Basisverzeichnis ausgeführt, entsprechend der Shell, die von einem Administrator im letzten Feld ausgewählt wurde, /etc/passwdz.

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

Ihre Shell wird ausgeführt und standardmäßig hat jede Shell eine festgelegte Datei für loginund logout. Wenn Sie in auf bash einzuloggen, ~/.profileausgeführt wird , und wenn Sie logout, ~/.bash_logoutausgeführt wird. ~/.bash_historyDatei behält Ihren Eingabebefehl.

Initialisierungsdatei in jeder Shell

TENEX C-Shell

  • ~/.login Wenn Sie sich anmelden
  • ~/.logout Wenn Sie sich abmelden
  • ~/.tcshrcdas gleiche wie ~./bashrcin bash

Sie können die Variable $histfileals Namen der Verlaufsdatei und die Variable $historyals Anzahl der zu speichernden Befehle festlegen.

Z-Schale

In der Tat ist es eine leistungsstarke Shell, und wenn Sie Zeit haben, sollten Sie unbedingt darauf migrieren.

Außer der anderen Shell hat die Z-Shell viele Konfigurations- und Initialisierungsdateien, nur ich schreibe:

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

Hinweis: Wenn $ZDOTDIRnicht festgelegt, wird die Startseite festgelegt.

C-Shell

Hinweis: Die TENEX C-Shell wurde aus der C-Shell gegabelt. C-Shell unterstützt von BSD. Wenn Sie mit der C-Programmierung vertraut sind, sollten Sie sich wohlfühlen, da die Syntax ähnlich ist.

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

Anmerkung: csh ist alt. Verwenden Sie stattdessen tcsh.

Korn Shell

  • ~/.profile
  • RC-Datei: Benutzerdefiniert
  • Abmeldedatei: N / A

Bourne Again SHell (BASH)

Es ist eine sehr, sehr mächtige Shell, die unter dem GNU-Projekt geboren und von Bourne Shell gespalten wurde.

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

Wenn Sie sich anmelden, läuft bash ~/.bash_profileund ~/.bash_profileläuft ~/.bashrc. In der Tat ~/.bashrcist dies keine Bash-Initialisierungsdatei, da Bash sie nicht ausführt.

Borowski-Schale

Es ist tot. Auch wenn Sie verwenden man sh, sehen Sie Handbuch von dash. [Anmerkung des Herausgebers: Das bisschen über dashgilt nur für Debian und Debian-basierte Distributionen wie Ubuntu.]

Ihre Antwort

~/.bash_profilearbeite unter bash, aber ~/.profilearbeite unter Bourne und Korn shell.

PersianGulf
quelle
2
Chet Ramey war der Hauptentwickler für Bash.
Tripleee
4

Eine Login-Shell ist einfach eine Shell, mit der Sie sich über ssh oder an der Konsole anmelden können. Eine nicht angemeldete Shell ist eine Shell, bei der sich auch jemand nicht anmelden kann. Eine Nicht-Login-Shell wird häufig von Programmen / Systemdiensten verwendet.

Was deinen dritten Punkt betrifft. Es ist wahr, .bashrcwird auf jeder Instanz der Shell ausgeführt. Wird .bash_profilejedoch nur beim Login verwendet. Also der Grund für die beiden getrennten Dateien.

.profileist für Dinge, die nicht speziell mit Bash zu tun haben, wie Umgebungsvariablen $ PATH, und sollte auch jederzeit verfügbar sein. .bash_profileist speziell für Login-Shells oder Shells, die beim Login ausgeführt werden.

anzenketh
quelle
Unterschied zwischen ~ / .profile und ~ / .bash_profile?
Lakesh
2
.profile ist für Dinge, die nicht speziell mit Bash zu tun haben, wie Umgebungsvariablen PATH, und sollte jederzeit verfügbar sein. .bash_profile ist speziell für Login-Shells oder Shells, die beim Login ausgeführt werden.
17.
füge diese Aussage zu deiner Antwort hinzu ... denn was meine Frage ist ...
Lakesh
Huh? Das beantwortet noch nicht einmal die Frage?
Mikel