GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum beziehen die Leute bash_profile von bashrc und nicht umgekehrt?

Die Leute beziehen bash_profile aufgrund lokaler Konventionen von bashrc statt umgekehrt .

Alle Meinungen dass ich in 09 darüber gelesen habe, wie man seine Startdateien konfiguriert basiert in erster Linie auf lokalen Konventionen. Die lokale Konvention erwähnt normalerweise nicht das große Ganze, da sie nicht viel über den Fall ohne Anmeldung und ohne Interaktion spricht. Das Lustige ist, und ich habe nachgesehen, aber ich sehe selten, dass jemand 12 erwähnt in all ihrem Gerede darüber, warum man Variablen in eine Startdatei und in die andere einfügt. Tatsächlich habe ich keinen einzigen Kommentar gehört, der sagte:„/bin/sh ist aus einem bestimmten Grund da. Bash emuliert die ursprüngliche Bourne-Shell, /bin/sh, wenn sie als solche aufgerufen wird. „Zum einen, und ich schweife etwas ab, ist dieser Fall wichtig für Leute, die nicht nur interaktiv mit der Shell arbeiten, sondern die nicht-interaktiv, nicht-login (unattended oder Hintergrund ) 24 Skripte, die eine minimale Shell-Verarbeitung benötigen, d. h. Hintergrundverarbeitung erfordert nicht die Feinheiten farbiger Eingabeaufforderungen, Befehlshistorie und -ersetzung, eine richtig definierte $TERM-Variable usw.

Weiter und in Bezug auf 30 , was ich normalerweise sehe, sind Leute, die minimale Suchpfade erstellen oder vollständig qualifizierte Programme aufrufen und nicht wissen, wie sie mit Ausgaben umgehen sollen, die nicht mit einem Terminal verbunden sind (d oder 58 Fall), wenn Sie mit ihrem 65 arbeiten Skripte. Dies liegt normalerweise daran, dass ein gutes Verständnis der Shell-Startsequenz nicht vollständig verstanden wird, was dazu führt, dass ein Benutzer seine eigenen Startdateien auf eine Weise implementiert, die inkonsistent oder inkohärent mit den Konventionen ist, die bereits im lokalen 70 Startdateien.

Genauer gesagt, das Setup, das durch lokale Konventionen durchgeführt wird, ist in dieser bestimmten Installation und dem 85 der Shell festgelegt Dateien. Untersucht man den 97 irgendeiner UNIX-Installation Dateien, die als Teil eines typischen 100 aufgerufen werden Startup-Sequenz, dann sollte man sein eigenes Startup auf eine Weise gründen, die komplementär zu den in diesen 116 festgelegten Konventionen ist Startdateien.

Das Linux-Dokumentationsprojekt gibt an:

/etc/skel/ Die Standarddateien für jeden neuen Benutzer werden in diesem Verzeichnis gespeichert. Jedes Mal, wenn ein neuer Benutzer hinzugefügt wird, werden diese Skeleton-Dateien in ihr Home-Verzeichnis kopiert. Ein durchschnittliches System hätte:.alias-, .bash_profile-, .bashrc- und .cshrc-Dateien. Andere Dateien bleiben dem Systemadministrator überlassen.

Obwohl die 120 Handbuch erwähnt diese Dateien nicht, die üblicherweise in 137 zu finden sind Verzeichnis ausdrücklich, soweit ich mich erinnere, haben SunOS, Solaris, RedHat, Ubuntu, HP-UX, umips und Ultrix 148 Dateien, um die Shell-Startdateien eines Benutzers nachzumustern. OSX eindeutig nicht - ich verwende gerade OSX 10.9.1. Leider gibt Ihnen OSX nicht viel darüber, wie die Dinge in Bezug auf Konventionen eingerichtet werden sollten, aber da OSX ein BSD-Derivat ist, habe ich einfach ein anderes BSD-Derivat verwendet und mein eigenes 153 danach die Startsequenz anpassen, damit sie in die lokalen Konventionen passt, die in OSX 10.9.1 161 verwendet werden Startdateien.

Ein wichtiger Punkt, der in einem parallelen Kommentar erwähnt wurde, ist, dass für OSX die Konvention darin besteht, jedes neue Terminal als interaktive Anmelde-Shell zu starten. Dies ist tatsächlich die Standardeinstellung in OSX. Diese Konvention stellt kein Problem dar, solange die Benutzer einer Installation konsistent sind. Das Standardverhalten des Terminals unter OSX kann geändert werden, damit es mit den Shell-Startkonventionen anderer UNIX-Distributionen übereinstimmt, indem Sie die folgenden Änderungen an den Einstellungen des Terminals vornehmen , ändern Sie insbesondere die Einstellung 170 um den 189 auszugeben Befehl:

Mit all dem als Hintergrund oder Einführung werde ich zu meinen besten Ratschlägen übergehen , für das, was es wert ist.

Mein bester Rat:

Untersuchen Sie die Dateien, die die Administratoren Ihrer UNIX-Distribution angelegt haben. Beginnen Sie mit den folgenden Speicherorten, sofern vorhanden. Vergessen Sie nicht, den 192 zu verwenden Befehl, da einige der Dateien mit einem Punkt beginnen. Sehen Sie, wie diese Dateien während des Starts verwendet werden, und sehen Sie, wie Ihre eigenen Startdateien mit ihnen interagieren:

/etc/bashrc
/etc/profile
/etc/skel/.bash_logout
/etc/skel/.bashrc
/etc/bash.bashrc
/etc/bash_completion

Schauen Sie in 202 nach Handbuch für die Aufruf- und Startsequenz. Es ist alles sehr gut angelegt.

Mit all dem als Einschränkung - so habe ich die Dinge bei meiner OSX 10.9.1-Installation gemacht - Andere UNIX-Distributionen WERDEN anders sein, aber was unten dargestellt wird, sollte auf den meisten, wenn nicht allen UNIX-Distributionen funktionieren, aber verwenden Sie diese anderen UNIX-Distributionen. Konvention als Leitfaden, um das Folgende für Ihre eigenen Zwecke anzupassen:

.profil

# ~/.profile: executed by the command interpreter for login shells.

# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.  Note, however, that we will have a ~/.bash_profile and it
# will simply source this file as a matter of course.

# See /usr/share/doc/bash/examples/startup-files for examples.
# The files are located in the bash-doc package.

# From here on out, I basically set up my PATH, LD_LIBRARY_PATH, and anything else I'd like
# global to running programs and how those programs find their libraries.  This is shared by
# `cron`, so we really don't want interactive stuff, here.  Also, I setup my environments
# for brew, macports, and fink here, essentially with setting PATH, and invocation of those
# package initialization file as in:

# Brew and locally compiled stuff:
export PATH=/usr/local/bin:$PATH
export PATH=/usr/local/sbin:$PATH

# The following line puts gnu utilities without the prefix "g" in the path
# i.e. tar/gtar:
export PATH=$PATH:/usr/local/Cellar/coreutils/8.21/libexec/gnubin

# MacPorts shoves stuff in /opt, so to get at that stuff...
export PATH=/opt/local/bin:$PATH
export PATH=/opt/local/sbin:$PATH

# Set up for using Fink, which lives in /sw:
[ -e /sw/bin/init.sh ] && . /sw/bin/init.sh

# My stuff:
export PATH=~/perl:$PATH
export PATH=~/bin:$PATH
export PATH=.:$PATH

.bashrc

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

# From here on out, I put in things that are meaningful to interactive shells, like aliases,
# `shopt` invocations, HISTORY control, terminal characteristics, PROMPT, etc.

.bash_profile

# ~/.bash_profile: executed by the command interpreter for login shells.

# Because of this file's existence, neither ~/.bash_login nor ~/.profile
# will be sourced.

# See /usr/share/doc/bash/examples/startup-files for examples.
# The files are located in the bash-doc package.

# Because ~/.profile isn't invoked if this files exists,
# we must source ~/.profile to get its settings:
if [ -r ~/.profile ]; then . ~/.profile; fi

# The following sources ~/.bashrc in the interactive login case,
# because .bashrc isn't sourced for interactive login shells:
case "$-" in *i*) if [ -r ~/.bashrc ]; then . ~/.bashrc; fi;; esac

# I'm still trying to wrap my head about what to put here.  A suggestion
# would be to put all the `bash` prompt coloring sequence functions as
# described on http://brettterpstra.com/2009/11/17/my-new-favorite-bash-prompt/

Das sind also meine zwei Cent. Denken Sie daran, dass meine Beispiele versucht haben, den Kontrollpfad durch die Startdateien zu zeigen und zu vermeiden, was die Konventionen einer bestimmten Website auferlegen könnten.


warum schreiben wir überhaupt alles in bash_profile?

.profile wurde ursprünglich von /bin/sh verwendet, die Verwendung von .profile ermöglicht Abwärtskompatibilität.

Sofern Sie keinen Mac verwenden, wird nicht alles in bash_profile abgelegt. Es wird in bashrc

abgelegt

Wäre es nicht sinnvoller und konsistenter mit der Linux-Community, alles in bashrc zu packen und bash_profile als Quelle zu haben?

Es ist üblich, Systeminformationen in die Shell zu schreiben, die geladen wird, wenn Sie sich mit der Maschine verbinden (Betriebszeit, Pakete, die aktualisiert werden müssen, CPU-Temperatur usw.). Wenn bashrc bash_profile bezog, würden Sie all diese Informationen jedes Mal sehen, wenn Sie eine neue Shell öffnen.

Unter Unix:

.bash_profile wird von Login-Shells geladen
.bashrc wird von interaktiven Shells geladen

Außer Mac, der die Login-Shell für jedes neue Terminal lädt (interaktiv oder nicht)

Zusätzliche Ressourcen

Unterschied zwischen bashrc und bash-profile

Wo sind Umgebungsvariablen angegeben


[...] Ich bin verwirrt, warum die Bevorzugung von bash_profile der Standard ist?

Wer sagt, dass es der Standard ist? Das Bash-Handbuch selbst hat folgendes zu diesem Thema zu sagen:

Daher enthält Ihr ~/.bash_profile normalerweise die Zeile

if [ -f ~/.bashrc ]; dann . ~/.bashrc; fi

nach (oder vor) Login-spezifischen Initialisierungen.


Linux
  1. Warum ich von Mac zu Linux gewechselt bin

  2. Meine Linux-Geschichte:Warum Menschen den Raspberry Pi vorstellen

  3. Möglichkeit, Kde daran zu hindern, die anderen Wm-Einstellungen zu überschreiben?

  4. Migrieren eines Linux-Servers über die Befehlszeile

  5. Erstellen eines Kernelmoduls aus mehreren Quelldateien, von denen eine den gleichen Namen wie das Modul hat

So installieren Sie die neueste OpenSSL-Version von Source unter Linux

So suchen Sie Dateien im Terminal unter Linux

Warum nicht Softwarepakete aus dem Internet installieren

Der schnellste Weg zum rekursiven Zählen von Dateien unter Linux

Einfache Möglichkeit, Dateien mit dem Cat-Befehl zusammenzuführen

Gibt es eine Möglichkeit, die Volume-ID einer .iso-Datei über die Befehlszeile zu ändern?