Die Leute beziehen bash_profile von bashrc anstatt umgekehrt aufgrund der örtlichen Konvention .
All die Meinung dass ich gelesen habe, wie man ihre Startdateien in konfiguriert bash
basiert hauptsächlich auf lokalen Konventionen. Die lokale Konvention erwähnt normalerweise nicht das große Ganze, da sie nicht viel über den Fall der Nichtanmeldung und der Nichtinteraktivität spricht. Das lustige ist, und ich habe geschaut, aber ich sehe selten jemanden erwähnen cron
in all ihren Vorträgen darüber, warum man Variablen in eine Startdatei versus die andere legt. Tatsächlich habe ich keinen Kommentar sagen hören: " / bin / sh gibt es aus einem Grund. Bash emuliert die ursprüngliche Bourne-Shell / bin / sh, wenn sie als solche aufgerufen wird. "Zum einen, und ich schweife ein wenig ab, ist dieser Fall wichtig für Leute, die nicht nur interaktiv mit der Shell arbeiten, sondern auch nicht interaktiv und nicht angemeldet sind ( unbeaufsichtigt oder Hintergrund ) cron
Skripte, die eine minimale Shell-Verarbeitung erfordern, d. h. Hintergrundverarbeitung, erfordern nicht die Feinheiten von farbigen Eingabeaufforderungen, Befehlsverlauf und -ersetzung, eine korrekt definierte $ TERM-Variable usw.
Weiter und in Bezug auf cron
Was ich normalerweise sehe, sind Leute, die minimale Suchpfade erstellen oder voll qualifizierte Programme aufrufen und nicht wissen, wie sie mit Ausgaben umgehen sollen, die nicht mit einem Terminal verbunden sind (d. h. nicht interaktiv, nicht angemeldet) bash
oder sh
Fall) bei der Arbeit mit ihren cron
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 in einer Weise implementiert, die mit den bereits in der lokalen Umgebung festgelegten Konventionen inkonsistent oder inkohärent ist /etc
Startdateien.
Das Setup, das durch lokale Konventionen vorgenommen wird, ist in der jeweiligen Installation und Shell beschrieben /etc
Dateien. Wenn man eine UNIX-Installation untersucht /etc
Dateien, die als Teil eines Typicals aufgerufen werden bash
Startreihenfolge, dann sollte man sein eigenes Startup in einer Weise erstellen, die zu der darin festgelegten Konvention komplementär ist /etc
Startdateien.
Im Linux-Dokumentationsprojekt heißt es:
/ etc / skel / Hier werden die Standarddateien für jeden neuen Benutzer gespeichert
Verzeichnis. Jedes Mal, wenn ein neuer Benutzer hinzugefügt wird, werden diese Skelettdateien hinzugefügt
in ihr Home-Verzeichnis kopiert. Ein durchschnittliches System hätte:
.alias-, .bash_profile-, .bashrc- und .cshrc-Dateien. Andere Dateien bleiben übrig
bis zum Systemadministrator.
Obwohl die bash
Im Handbuch werden diese Dateien nicht erwähnt, die häufig im Internet zu finden sind /etc/skel
Verzeichnis explizit, von was ich mich erinnere, SunOS, Solaris, RedHat, Ubuntu, HP-UX, umips, & amp; Ultrix haben /etc/skel
Dateien, nach denen die Shell-Startdateien eines Benutzers strukturiert werden sollen. OSX macht das eindeutig nicht - ich verwende gerade OSX 10.9.1. Leider gibt Ihnen OSX nicht viel zu sagen, wie die Dinge in Bezug auf Konventionen eingerichtet werden sollen, aber da OSX ein BSD-Derivat ist, habe ich einfach ein anderes BSD-Derivat verwendet und mein eigenes Muster erstellt bash
Anschließend wird die Startsequenz so angepasst, dass sie den in OSX 10.9.1 verwendeten lokalen Konventionen entspricht /etc
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 Anmeldeshell zu starten. Dies ist in der Tat die Standardeinstellung in OSX. Es gibt kein Problem mit dieser Konvention, solange die Benutzer einer Installation konsistent sind. Das Standardverhalten für das Terminal unter OSX kann geändert werden, um es mit den Shell-Startkonventionen anderer UNIX-Distributionen in Einklang zu bringen, indem die folgenden Änderungen an den Einstellungen des Terminals vorgenommen werden Ändern Sie insbesondere die Einstellung, Shells open with:
das ausstellen /usr/bin/login -f -l whmcclos bash -i
Befehl:
Mit all dem als Hintergrund oder Einführung, werde ich darauf eingehen Mein bester Rat , für was es wert ist.
Mein bester Rat:
Untersuchen Sie die Dateien, die die Administratoren Ihrer UNIX-Distribution erstellt haben. Beginnen Sie mit den folgenden Positionen, falls vorhanden. Vergiss nicht das zu benutzen ls -a
Befehl, da einige Dateien mit einem Punkt beginnen. Sehen Sie, wie diese Dateien während des Startvorgangs verwendet werden und wie Ihre eigenen Startdateien mit ihnen interagieren:
/etc/bashrc
/etc/profile
/etc/skel/.bash_logout
/etc/skel/.bashrc
/etc/bash.bashrc
/etc/bash_completion
Schau in den bash
Handbuch für die Aufruf- und Startsequenz. Es ist alles sehr gut angelegt.
Mit all dem als Einschränkung - hier ist, wie ich die Dinge in meiner OSX 10.9.1-Installation gemacht habe - Andere UNIX-Distributionen WERDEN unterschiedlich sein, aber was unten dargestellt ist, sollte für die meisten, wenn nicht alle UNIX-Distributionen funktionieren, aber diese anderen UNIX-Distributionen verwenden. Konvention als Leitfaden, um das Folgende für Ihre eigenen Zwecke maßzuschneidern:
.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 meine zwei Cent. Denken Sie daran, dass meine Beispiele versucht haben, den Steuerpfad durch die Startdateien anzuzeigen und zu vermeiden, welche Konventionen eine bestimmte Site auferlegt.
/etc/bashrc
zusätzlich zu/etc/nash.bashrc
. Ich wollte das entfernen, vorausgesetzt, es war ein Fehler, aber ich dachte, ich würde fragen. Gibt es Systeme, die mit einem/etc/bashrc
Datei? Ich habe noch keinen in der Linux-Welt gesehen./etc/bashrc
Datei..profile wurde ursprünglich von / bin / sh verwendet, wobei .profile die Abwärtskompatibilität ermöglicht.
Sofern Sie keinen Mac verwenden, wird nicht alles in bash_profile abgelegt. Es wird in bashrc gesetzt
Es ist üblich, Systeminformationen in die Shell einzufügen, die geladen wird, wenn Sie eine Verbindung zum Computer herstellen (Betriebszeit, Pakete, die aktualisiert werden müssen, CPU-Temperatur usw.). Wenn bashrc bash_profile verwendet, werden alle diese Informationen jedes Mal angezeigt, wenn Sie eine neue Shell öffnen.
In Unix:
.bash_profile wird von Login-Shells geladen
.bashrc wird von interaktiven Shells geladen
Mit Ausnahme von Mac, für den die Anmeldeshell geladen wird jedes neue Terminal (interaktiv oder nicht)
Zusätzliche Ressourcen
unterschied zwischen bashrc und bash-profil
Wo werden Umgebungsvariablen angegeben?
quelle
bash
Start anders; Wohl hat jede UNIX - Distribution eine Konvention, die vom Administrator festgelegt wurde und sich in der/etc/skel
und andere/etc
Shell-Startdateien, die den lokalen Benutzern eine Infrastruktur auferlegen, die mit der Distribution variiert. Es ist schwierig, eine pauschale Aussage darüber zu treffen, welche Konvention richtig ist. Ich würde mit der örtlichen Versammlung gehen und das erweitern. Dasbash
Handbuch buchstabiert deutlich wann$HOME/.bashrc
wird aufgerufen; für OSX, &Ampere; jeder andere : Interaktiv & amp; Nicht-Login. Es ist die vererbte Infrastruktur für den Shell-Start, mit der man sich am Ende auseinandersetzen muss.bash
Die daran angehängte Shell ist standardmäßig eine Anmeldeshell. Ein informierter Benutzer, der die in Ubuntu verwendeten Konventionen befolgen möchte, bearbeitet einfach die Einstellungen in OSX Terminal.app und ändert die Muscheln öffnen mit: von Standard Login-Shell zum Befehl (vollständiger Pfad): Feld gesetzt auf/usr/bin/login -f -l userid bash -i
. Dies ändert die Konvention, um alle Terminal.app als interaktive NICHT-Login-Shells wie Ubuntu zu starten. Unabhängig davon handelt es sich um eine lokale Konvention, die sich von Linux unterscheidet und mit der gearbeitet werden kann.Wer sagt, dass es der Standard ist? Das Bash-Handbuch selbst hat dies zu sagen zu dem Thema:
quelle