Ich weiß , es gibt /etc/profile
und /etc/bashrc
Dateien für die globalen Umgebungsvariablen und vielleicht bin ich nur ihre Zwecke Missverständnis, aber ...
Gibt es eine globale bash_profile
Datei?
Ich benutze Mac OS X
Es wird nicht aufgerufen bash_profile
, aber der Standardort für die globale Bash-Konfiguration ist /etc/bash.bashrc
. Es ist üblich, dies so zu bezeichnen, /etc/profile
wenn die Shell bash ist. Zum Beispiel habe /etc/profile
ich in meinem :
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1=’0
if [ ‐f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
fi
fi
/etc/profile
Bietet im Hinblick auf die Verwendung eine systemweite Konfiguration für alle Bourne-kompatiblen Shells (sh, bash, ksh usw.). Normalerweise ist keine Entsprechung erforderlich /etc/bash_profile
, da die Profildatei das Verhalten für Anmeldeshells steuern soll. Normalerweise ist alles, was Sie dort tun möchten, nicht bash-spezifisch. /etc/bash.bashrc
ist bash-spezifisch und wird sowohl für Anmelde- als auch für Nicht-Anmelde-Shells ausgeführt.
Um die Sache noch weiter zu komplizieren, hat OS X anscheinend noch nicht einmal eine /etc/bash.bashrc
. Dies hängt wahrscheinlich damit zusammen, dass Terminals in OS X standardmäßig als Anmeldeshells ausgeführt werden , sodass die Unterscheidung verloren geht:
Eine Ausnahme zu den Richtlinien für Terminalfenster ist die Terminal.app von Mac OS X, die standardmäßig für jedes neue Terminalfenster eine Anmelde-Shell ausführt, die .bash_profile anstelle von .bashrc aufruft. Andere GUI-Terminalemulatoren tun möglicherweise dasselbe, die meisten neigen jedoch dazu, dies nicht zu tun.
Ich führe kein OS X aus, daher endet der Umfang meines Wissens dort.
/etc/bash.bashrc
aus einer nicht interaktiven Shell./etc/profile
kann von einer nicht interaktiven Shell gelesen werden. Siehe Unterschied zwischen Anmeldeshell und Nicht-Anmeldeshell?/etc/profile
in Ubuntu 12.04. Was würdest du stattdessen vorschlagen, wenn man eine will,/etc/profile
die nur unter Bash ausgeführt wird, und keine andere sh-kompatible Shell?/etc/profile
Datei für mein System enthält einen Kommentar an der Spitze, der lautet:# System-wide .profile for sh(1)
. Bedeutet das, dassprofile
essh
spezifisch ist? Läuft dassh
irgendwie schon malbash
?sh
ist eine Teilmenge vonbash
./etc/profile
wird fürsh
,bash
und alle anderen Bourne-kompatiblen Shells ausgeführt./etc/bashrc
auf dem Mac aufgerufen wird , nicht/etc/bash.bashrc
. Es scheint auch zu laufen/bin/sh
./etc/profile
ist das globalebash_profile
. Es gibt keine Datei, die spezifisch für bash ist. Bash liest nur die Standarddatei, die von allen Bourne-Shell-Elementen gelesen wird. Hier können Sie systemweite Umgebungsvariablen festlegen.Siehe Gibt es eine ".bashrc" -Äquivalentdatei, die von allen Shells gelesen wird? für eine allgemeine Übersicht über die allgemeinen Startdateien von bash.
quelle
Richten Sie Interactive Shell (Bash) global ein
Dies wird nicht geladen
/etc/profile
, so dass nichts in/etc/profile.d/
geladen wird (im Gegensatz zu Login-Shells, siehe das Ende).Die globale Datei dafür ist /etc/bashrc oder /etc/bash.bashrc (abhängig vom
-DSYS_BASHRC=
Flag, das beim Kompilieren gesetzt wurde):Normalerweise ist es eine gute Idee, diese Datei so zu belassen, wie sie ist (so weit wie möglich), um Konflikte zu vermeiden. Die Strategie, die ich verwende, ähnelt derjenigen, die Anmelde-Shells (/ etc / profile) verwenden.
Meine Strategie ist es, einen Loader an die obige Datei anzuhängen:
Jetzt kann ich der globalen interaktiven Shell-Datei (Bash) auf einfache Weise n Anpassungen hinzufügen, indem ich neue .shfiles in das Verzeichnis /etc/bashrc.d lege.
Grep global einfärben
/etc/bashrc.d/grep.sh
Sie können dies mit diesem Einzeiler tun:
Vergleichen Sie profile.d mit bashrc.d
Wenn Sie nach dem Lesen nicht überzeugt sind, tun Sie dies, um sich selbst zu überzeugen:
Öffnen Sie einen neuen Terminal-Emulator und suchen Sie in Ihrem Benutzerverzeichnis nach einem gängigen Wort wie "the" mit grep
Nichts sollte gefärbt sein. Machen Sie dasselbe in einer virtuellen Konsole, indem Sie CTRLALTF1 ausführen (denken Sie daran, dass Ihr X-Server wahrscheinlich mit CTRLALTF7 ausgeführt wird, damit Sie zurückwechseln können. Wenn Sie es vergessen haben, starten Sie zum Beispiel einfach Ihren Desktop-Manager neu.)
liefert nach Wunsch farbige Ergebnisse.
Nichts sollte gefärbt sein. Tun Sie dasselbe in einer virtuellen Konsole, indem Sie Folgendes tun CTRLALTF1(denken Sie daran, dass Ihr X-Server wahrscheinlich gerade ausgeführt wird, CTRLALTF7damit Sie zurückschalten können. Wenn Sie es vergessen haben, starten Sie zum Beispiel einfach Ihren Desktop-Manager neu).
liefert nach Wunsch farbige Ergebnisse.
Eine Login-Shell erhalten Sie, wenn Sie eine Maschine booten oder virtuelle Konsolen CTRLALTF1über die FNthvirtuelle Konsole wechseln .
Eine Login-Shell wird geladen,
/etc/profile
während/etc/profile.d/*.sh
Dateien geladen werden.quelle