Warum sind diese Dateien nicht Teil von / etc / profile, wenn sie auch für den Start von Bash kritisch sind?
Wenn Sie meinen, "Warum werden sie nicht einfach zu einem riesigen Drehbuch kombiniert?", Lautet die Antwort:
- Denn das wäre ein Wartungs-Albtraum für die Leute, die für die Skripte verantwortlich sind.
- Da das Laden der Skripte als unabhängige Module das gesamte System dynamischer anpassbar macht, können einzelne Skripte hinzugefügt und entfernt werden, ohne die anderen zu beeinflussen. Usw.
- Weil sie über / etc / profile geladen werden, wodurch sie ohnehin auf die gleiche Weise Teil des Bash- "Profils" werden.
Wenn diese Dateien anwendungsspezifische Startdateien sind, die für den Bash-Start nicht kritisch sind, warum sind sie dann Teil des Startvorgangs? Warum werden sie nicht nur ausgeführt, wenn die spezifischen Anwendungen, für die sie Einstellungen enthalten, ausgeführt werden?
Das scheint mir eine umfassendere Frage der Designphilosophie zu sein, die ich in zwei Teile aufteilen werde. Die erste Frage betrifft den Wert und die Angemessenheit der Verwendung der Shell-Umgebung. Hat es einen positiven Wert? Ja, das ist nützlich. Ist es die beste Lösung für alle Konfigurationsprobleme? Nein, aber es ist sehr effizient für die Verwaltung einfacher Parameter und auch weithin anerkannt und verstanden. Wenn Sie sich jedoch für eine heterogene Konfiguration entscheiden, könnte $ PATH möglicherweise von einem separaten, unabhängigen Tool verwaltet werden. Bevorzugte Tools wie $ EDITOR könnten sich in einer SQLite-Datei befinden, $ LC lang könnte sich in einer Textdatei mit einem befinden Benutzerdefiniertes Format an anderer Stelle usw. - verwendet nicht nur env-Variablen und/etc/profile.d
plötzlich einfacher erscheinen? Sie wissen wahrscheinlich bereits, was eine Umgebungsvariable ist, wie sie funktioniert und wie sie verwendet wird, und lernen 5 völlig unterschiedliche Mechanismen für 5 verschiedene allgegenwärtige Aspekte dessen, was angemessen als "die Umgebung" bezeichnet wird.
Die zweite Frage lautet: "Ist das Starten der richtige Zeitpunkt dafür?", Was den Einwand aufwirft, dass es nicht sehr effizient ist (all die Daten, die möglicherweise verwendet werden oder nicht, usw.). Aber:
- Realistisch gesehen sind es nicht allzu viele Daten, zum Teil, weil niemand, der bei Verstand ist, sie für mehr als ein paar einfache Parameter verwenden würde (da es andere Möglichkeiten gibt, eine Anwendung zu konfigurieren).
- Wenn es in Bezug auf häufig aufgerufene Dinge mit Bedacht verwendet wird, ist
gcc
es weniger effizient, wenn Sie beispielsweise jedes Mal $ CFLAGS aus einer Datei als Standard festlegen . Denken Sie daran, dass die Größe des Speichers ebenfalls infinitesimal ist.
- Es kann sich um systemische Dinge handeln, an denen mehr als eine Anwendung beteiligt sein kann, und die Shell ist eine gemeinsame Grundlage .
Dieser Liste könnten weitere hinzugefügt werden, aber dies gibt Ihnen hoffentlich eine Vorstellung von den Vor- und Nachteilen des Problems - die wichtigsten Vor- und Nachteile sind, dass es sich um einen globalen Namespace handelt.
Does it have positive ... and understood.
Was versuchst du hier zu sagen? Ich habe alles andere als diesen Absatz verstanden.profile.d
Verzeichnis funktioniert nur, weil sein Inhalt von stammt/etc/profile
, was durch Shells wie Bash als Startdatei angegeben wird (siehe INVOCATION inman bash
). Wenn Sie bearbeiten/etc/profile
, können Sie deaktivieren/etc/profile.d
./etc/profile.local
scheint eine SUSE-Erfindung zu sein, die vermutlich von irgendwoher stammt,/etc/profile
damit Sie Ihre eigenen Sachen dort unterbringen können. Wenn Sie es jedoch auf ein anderes System als SUSE verschieben und keine weiteren Anpassungen vornehmen, wird es von niemandem verwendet.Diese Dateien sind für eine Anwendung spezifisch, werden jedoch beim Starten der Shell und nicht beim Starten der Anwendung bereitgestellt. Ein Konfigurationsverzeichnis wird hier aus dem gleichen Grund verwendet, wie es an vielen anderen Stellen vorkommt. Auf diese Weise kann eine Anwendung oder ein Softwarepaket Konfigurationen ändern. Dies wäre ohne eine geteilte Konfiguration nicht möglich, da mehrere Pakete, die versuchen, eine einzelne Konfigurationsdatei zu verwalten / aktualisieren, die auch vom Benutzer geändert werden kann, fehlerhaft und unübersichtlich wären.
Auch eine Randnotiz,
/etc/profile
wird von allen Muscheln bezogen, nicht nur von Bash. Die bash-spezifische Konfigurationsdatei ist bashrc und wird nur für interaktive Shells verwendet.quelle
Die Antwort von Jordan ist falsch.
/etc/profile
wird nicht von allen Shells beschafft. Wie Sie weisen darauf hin, ist es nicht von Quellencsh
,tcsh
- ich bin nicht sicherzsh
. Es wird von Bourne Shell (sh
) -Derivaten wie Korn Shell (ksh
) und BASH (bash
) bereitgestellt .csh
verwendet/etc/login
. Menschen, die dazu neigen, ausschließlich Borne Shell-Derivate zu verwenden, neigen dazu, andere Schalen zu vergessen. Sie fügen etwas hinzu, um zu/etc/profile
erwarten , dass es für "alle Benutzer" gilt, und sind dann überrascht, wenn der ungerade C-Shell-Benutzer (und wir sind eine ungerade Menge) nicht über das Zeug verfügt, in dem sie konfiguriert sind/etc/profile
.Trotzdem neigen die Leute dazu, andere Borne Shell-Derivat-Shells zu vergessen. Wenn sie
bash
oder verwendenksh
, können sie Syntax hinzufügen,/etc/profile
die in Bourne Shell nicht gültig ist, beispielsweise eine Variable definieren und in dieselbe Zeile exportieren. Dann bekommen Sie ein Skript, das funktioniert#!/bin/sh
und die Syntax unterdrückt./etc/profile
sollte sich an die Bourne Shell-kompatible Syntax halten.Ebenso sollten Sie sich an Ihre eigene halten
.profile
(verwenden.bash_profile
Sie diese Option, wenn Sie eine Bash-Syntax wünschen) - es kann ein bisschen mehr Tipparbeit sein, aber es ist mehr Tipparbeit, die Sie alle einmal ausführen. Verweis${HOME}
und nicht~
, etc. Einige Unix- und Cron-Versionen laufen untersh
, jede Ihrer Zeilen wird vonMakefile
verarbeitet.sh
Wenn Sie also mit mehreren UNIX-Versionen arbeiten, lohnt es sich wirklich, Ihre.profile
Bourne-Shell kompatibel zu halten . Als SysAdmin kann ich Ihnen nicht sagen, wie oft ich jemandem geholfen habe, indem ich.profile
die Bourne Shell-Kompatibilität behoben habe .Unter Linux
/bin/sh
ist es ein Link zu/bin/bash
und wenn Sie es ausführen, sieht es nach dem Pfad aus, der zum Ausführen verwendet wurde, und beschränkt sich (theoretisch) nur auf Dinge, die von Bourne Shell unterstützt werden. Ebensovi
unter Linux beschränkt sich das eigentlichvim
wieder. Gelegentlich sehen Sie Merkmale "durchbluten". Gelegentlich wird das sovim
tun, als würdevi
es etwas tun, was dies nichtvim
unterstützt,vi
weil die Autorenvim
vergessen haben, dies im "vi Abwärtskompatibilitäts" -Modus zu deaktivieren. Es würde mich nicht wundern, wenn so zubash
tun, als ob essh
ähnliche "Durchblutungs" -Funktionen gäbe . Wäre nicht überrascht, wenn eine Funktion "unter Borne Shell unter Linux funktioniert", aber nicht auf einem System V- oder BSD-basierten UNIX (AIX, OpenBSD usw.).quelle
/bin/sh
ein Link zu/bin/bash
" ist? Das ist eine vernünftige Aussage.