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
abgelegtWä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.