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.