Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
Shell-Programmierung von Jürgen Wolf
Einführung, Praxis, Referenz
Buch: Shell-Programmierung

Shell-Programmierung
782 S., mit CD, 44,90 Euro
Rheinwerk Computing
ISBN 3-89842-683-1
gp Kapitel 8 Rund um die Ausführung von Scripts und Prozessen
  gp 8.1 Prozessprioritäten
  gp 8.2 Warten auf andere Prozesse
  gp 8.3 Hintergrundprozess wieder hervorholen
  gp 8.4 Hintergrundprozess schützen
  gp 8.5 Subshells
  gp 8.6 Mehrere Scripts verbinden und ausführen (Kommunikation zwischen Scripts)
    gp 8.6.1 Datenübergabe zwischen Scripts
    gp 8.6.2 Rückgabe von Daten an andere Scripts
    gp 8.6.3 Scripts synchronisieren
  gp 8.7 Jobverwaltung
  gp 8.8 Shellscripts zeitgesteuert ausführen
  gp 8.9 Startprozess- und Profildaten der Shell
    gp 8.9.1 Arten von Initialisierungsdateien
    gp 8.9.2 Ausführen von Profildateien beim Start einer Login-Shell
    gp 8.9.3 Ausführen von Profildateien beim Start einer Nicht-Login-Shell (Bash und Korn-Shell)
    gp 8.9.4 Zusammenfassung alle Profil- und Startup-Dateien
  gp 8.10 Ein Shellscript bei der Ausführung
    gp 8.10.1 Syntaxüberprüfung
    gp 8.10.2 Expansionen
    gp 8.10.3 Kommandos
  gp 8.11 Shellscripts optimieren


Rheinwerk Computing

8.9 Startprozess- und Profildaten der Sheldowntop


Hinweis   Hier gleich zu Beginn der Hinweis, dass das Thema »Konfigurationsdateien« eine ziemlich knifflige Sache ist, da viele Distributionen hier ihr eigenes Süppchen kochen. »Knifflig« sind die Standardeinstellungen, die sich bei den Distributionen unterscheiden. Es handelt sich dabei aber um ein grundsätzliches Prinzip, anhand dessen Sie bestimmte Funktionsweisen einer Shell verstehen können.


Beim Start liest die Shell – noch vor der ersten Benutzereingabe – eine Reihe von Konfigurationsdateien ein, interpretiert den Inhalt und übernimmt bestimmte Einstellungen. Mit einer solchen Konfigurationsdatei wird das Verhalten einer Shell eingestellt, Voreinstellungen werden getroffen und die Benutzerumgebung wird individuell konfiguriert. Allerdings kann der Start einer Shell auf viele unterschiedliche Arten erfolgen.

gp  Eine Shell kann interaktiv (interaktive Subshell) sein und Eingaben von der Kommandozeile lesen und ausführen (wie Sie dies vom täglichen Gebrauch Ihrer Shell her kennen).
gp  Eine Shell kann nicht interaktiv (nicht interaktive Subshell) sein, so wie dies bspw. beim Starten Ihrer Shellscripts der Fall ist.
gp  Eine Shell kann als Login-Shell gestartet werden (wird für den Benutzer als Erstes nach seiner Anmeldung gestartet).
gp  Eine Shell kann als zusätzliche Shell gestartet werden.

Da hier viele verschiedene Start- bzw. Anwendungsformen vorhanden sind, durchläuft die Shell für jeden Modus unterschiedliche Konfigurationsdateien, sofern diese vorhanden sind.


Hinweis   Mittlerweile gibt es eine Menge Linux-UNIX-Systeme (Distributionen) und auch Shells, sodass diese Shell-Initialisierungsdateien recht unterschiedlich sein können. Dies kann bedeuten, dass auf manchen Systemen noch mehr solcher Konfigurationsdateien vorhanden sind als hier beschrieben oder sich diese eventuell in einem anderen Verzeichnis (gar mit anderem Namen) befindet.



Rheinwerk Computing

8.9.1 Arten von Initialisierungsdateien  downtop

Das Einlesen von Initialisierungsdateien wird häufig recht komplex und umständlich erklärt, aber im Prinzip müssen Sie hierbei nur zwei unterschiedliche Arten solcher Dateien auseinander halten:

gp  Systemweite Initialisierungsdateien – systemweite Einstellungen finden Sie gewöhnlich im Verzeichnis /etc (bspw. /etc/profile) oder manchmal noch in /usr/etc. Einige Programme (nicht nur Shells verwenden Initialisierungsdateien) legen ihre systemweiten Konfigurationsdateien auch in /usr/share/ packet/xxxxxrc ab (Endung rc steht für read command).
gp  Benutzer/individuelle Initialisierungsdateien – diese Initialisierungsdateien finden Sie für gewöhnlich im HOME-Verzeichnis des Benutzers als versteckte Datei (beginnend mit einem Punkt).

Rheinwerk Computing

8.9.2 Ausführen von Profildateien beim Start einer Login-Shell  downtop

Beim Ausführen von Profildateien gehen die Shells teilweise unterschiedliche Wege (abgesehen von der systemweiten Initialisierungsdatei /etc/profile), weshalb hier auch die einzelnen Shells berücksichtigt werden.

Systemweite Einstellungen (Bourne-Shell, Korn-Shell und Bash)

Beim Anmelden einer interaktiven Login-Shell wird die systemweite Profildatei /etc/profile ausgeführt. Diese systemweiten Einstellungen sind allerdings vom normalen Benutzer nicht editierbar. Hier kann bspw. der Systemadministrator weitere Shell-Variablen definieren oder Umgebungsvariablen überschreiben. Meistens werden aus /etc/profile weitere Initialisierungsdateien aufgerufen.


Hinweis   Woher kommen bei einer Login-Shell die Umgebungsvariablen? Wenn Sie sich als Benutzer anmelden, startet login eine Shell. Welche das ist, steht in der passwd-Datei im letzten Feld. Diese Shell erzeugt nun eine Umgebung mit einer Reihe von Variablen.

Die meisten dieser Werte werden automatisch auf einen Standardwert gesetzt, trotzdem gibt es auch einige benutzerspezifische Werte wie etwa HOME, in denen sich das Heimverzeichnis des eben eingeloggten Benutzers befindet.


Benutzerspezifische Einstellungen

Wurden die systemspezifischen Konfigurationsdateien abgearbeitet, haben Sie die Möglichkeit, die Umgebung an die eigenen Bedürfnisse (bzw. für jeden Benutzer auf dem System) anzupassen. Hier enden dann auch die Gemeinsamkeiten der verschiedenen Shells, im Folgenden muss also auf die einzelnen Parteien eingegangen werden.

Bourne-Shell

In der Bourne-Shell wird die lokale benutzerindividuelle Konfigurationsdatei .profile (im Heimverzeichnis des Benutzers $HOME/.profile) für eine interaktive Login-Shell eingelesen und interpretiert. Für die Bourne-Shell wäre der Login-Prozess somit abgeschlossen (siehe Abbildung 8.1).


Hinweis   Wenn Sie in der Bash die Bourne-Shell (sh) aufrufen, so wird nach /etc/profile nur noch die Datei .profile durchlaufen.



Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 8.1   Start einer Login-Shell (Bourne-Shell)


Bash

In der Bash wird im Heimverzeichnis des Benutzers zunächst nach der Datei .bash_profile gesucht. .bash_profile ist die lokale benutzerindividuelle Konfigurationsdatei für eine interaktive Login-Shell in der Bash. Existiert die Datei .bash_profile nicht, wird nach der Datei .bash_login (ebenfalls im Heimverzeichnis) gesucht. Konnte weder eine .bash_profile noch eine .bash_login-Datei gefunden werden, wird wie schon bei der Bourne-Shell nach .profile Ausschau gehalten und ausgeführt (siehe Abbildung 8.2). Als Alternative für .bash_profile findet man auf vielen Systemen auch die Datei .bashrc (mehr zu .bashrc in Kürze).


Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 8.2   Start einer Login-Shell (Bash)


Korn-Shell

Die Korn-Shell startet zunächst wie die Bourne-Shell die Datei .profile ($HOME/.profile) aus dem Heimverzeichnis des Benutzers. Jetzt wird noch eine weitere Datei ausgeführt, welche zusätzliche Parameter für die laufende Sitzung setzt. Diese Datei startet die Shell jedes Mal neu, wenn Sie eine weitere Shell aufrufen. Die Datei, die ausgeführt werden soll, findet die Korn-Shell in der Umgebungsvariablen ENV, welche bei einer der Profildateien zuvor (/etc/profile oder .profile) definiert und exportiert wurde. In der Regel handelt es sich hierbei um die Datei .kshrc im Heimverzeichnis des Benutzers. In dieser Datei findet man typischerweise alle Shell-Optionen, Funktionen, Aliase, die man nicht exportieren kann – daher wird auch bei jeder neuen Shell diese Datei neu ausgeführt (siehe Abbildung 8.3). Sie werden anschließend gleich feststellen, dass die Bash ohne eine Login-Shell auch nichts anderes macht und ebenfalls eine weitere Datei beim Start einer neuen Subshell aufruft.


Hinweis   Hierbei handelt es sich wieder um das knifflige Thema, das am Anfang des Abschnitts angesprochen wurde.

Auf einer BSD-Maschine findet man hier nur .cshrc, auf Debian wiederum findet man weder .cshrc noch .kshrc – ebenso wenig wie unter anderen Linux-Systemen (Fedora, SuSE). Aber auf einem Solaris-Rechner scheint die Welt wieder in Ordnung zu sein, hier ist .kshrc vorhanden (weil ja auch per Standard die Korn-Shell installiert wird).



Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 8.3   Start einer Login-Shell (Korn-Shell)



Rheinwerk Computing

8.9.3 Ausführen von Profildateien beim Start einer Nicht-Login-Shell (Bash und Korn-Shell)  downtop

Gerade Linux-User, die den Abschnitt oben zu den Profildateien zur geliebten Bash gelesen haben, werden sich fragen, wo denn nun entsprechende Dateien sind. Häufig findet der User beim Hausgebrauch gerade mal die Datei .profile wieder. Ein Eintrag in diese Datei zeigt zunächst, dass sich in einer »xterm« hier gar nichts rührt. Sie können testweise eine einfache export-Anweisung in die Profildateien einfügen und mittels echo ausgeben lassen. Erst wenn eine echte Login-Shell (bspw. mit (Strg)+(Alt)+(F1)) geöffnet wird und sich der Benutzer in diese einloggt, werden die Einträge in .profile aktiv. Das ist auch kein Wunder, denn alles zuvor Beschriebene galt für eine echte Login-Shell (das Thema wurde bereits in Abschnitt 1.9.2 behandelt).

Sobald Sie allerdings ein Pseudo-Terminal (pts bzw. ttyp) öffnen, haben Sie aber keine Login-Shell mehr, sondern eine neue Subshell (bzw. eine interaktive Shell). Eine Subshell starten Sie ...

gp  beim Aufruf des Scripts mit sh ascript, ksh ascript, bash ascript oder einfach nur mit ascript und natürlich mit der Angabe der Shell in der ersten Zeile des Shellscripts (bspw. #!/bin/ksh ...).
gp  beim direkten Aufruf einer Shell mit sh, ksh oder bash.

Nun benötigt auch die Bash eine Startdatei, wie dies bei der Korn-Shell mit .kshrc standardmäßig der Fall ist. Der Grund ist hier derselbe wie schon bei der Korn-Shell. Auch hier ist es unmöglich, die Aliase, Shell-Optionen und Funktionen zu exportieren. Beim Starten einer Subshell zeigen also die Profildateien keine Wirkung mehr. Ganz einfach: Gäbe es hier keine weitere Startdatei, so gäbe es in der Subshell keine Aliase, Shell-Optionen und Funktionen, die Sie vielleicht sonst so regelmäßig einsetzen.

In der Korn-Shell, das haben Sie bereits erfahren, lautet die Startup-Datei .kshrc bzw. es ist die Datei, die in der Variablen ENV abgelegt wurde. Die Bash geht denselben Weg und führt gewöhnlich die Datei .bashrc im Heimverzeichnis des Benutzers aus. Allerdings gibt es in der Bash zwei Möglichkeiten. Wird eine neue Subshell im interaktiven Modus erzeugt (also einfach in der Arbeits-Shell durch einen Aufruf von bash), so wird die Datei .bashrc ausgeführt. Wird hingegen ein neues Script gestartet, wird die Datei gestartet, die sich in der Umgebungsvariablen BASH_ENV befindet. Sofern Sie allerdings BASH_ENV nicht selbst anpassen und eine andere Datei starten wollen, wird BASH_ENV gewöhnlich auch nur mit .bashrc belegt.


Hinweis   Die Bourne-Shell ruft keinerlei Startdatei beim Aufrufen einer neuen Subshell auf.


Ausnahmen

Es gibt allerdings noch zwei Ausnahmen, bei denen zwar eine Subshell erzeugt, aber nicht die Startup-Datei .bashrc bzw. .kshrc ausgeführt wird. Und zwar ist dies der Fall beim Starten einer Subshell zwischen runden Klammern ( ... ) (siehe Abschnitt 8.5) und bei der Verwendung einer Kommando-Substitution. Hierbei erhält die Subshell immer jeweils eine exakte Kopie der Eltern-Shell mit allen Variablen. Und natürlich wird auch keine Startup-Datei ausgeführt (auch keine Subshell), wenn Sie ein Script in der aktuellen Shell mit einem Punkt aufrufen.


Rheinwerk Computing

8.9.4 Zusammenfassung alle Profil- und Startup-Dateien  toptop

Tabelle 8.4 bietet zum Schluss noch einen kurzen Überblick zu den Dateien (und Variablen), die bezüglich der Initialisierung für Shells und Shellscripts bedeutend sind.


Tabelle 8.4   Wichtige Profil- und Startup-Dateien

Datei sh ksh bash Bedeutung
/etc/profile x x x Diese Datei wird von einer interaktiven Login-Shell abgearbeitet und setzt systemweite, vom normalen Benutzer nicht veränderbare Einstellungen. Hier werden häufig weitere Initialisierungsdateien aufgerufen.
$HOME/.profile x x x Diese Datei ist die lokale benutzerdefinierte Konfigurationsdatei für eine interaktive Login-Shell, welche der Benutzer an die eigenen Bedürfnisse anpassen kann.
$HOME/.bash_profile x Diese Datei ist die lokale benutzerdefinierte Konfigurationsdatei für eine interaktive Login-Shell, welche der Benutzer an die eigenen Bedürfnisse anpassen kann (wird gegenüber .profile bevorzugt behandelt und verwendet).
$HOME/.bash_login x Wie .bash_profile. Wird verwendet, wenn .bash_profile nicht existiert, ansonsten danach ausgeführt.
$HOME/.bashrc x Diese Datei ist die lokale benutzerdefinierte Konfigurationsdatei für jede interaktive Shell, die keine Login-Shell ist, welche der Benutzer den eigenen Bedürfnissen entsprechend anpassen kann.
$HOME/.kshrc x Diese Datei ist die lokale benutzerdefinierte Konfigurationsdatei für jede interaktive Shell, die keine Login-Shell ist, welche der Benutzer an die eigenen Bedürfnisse anpassen kann.
$BASH_ENV x Die Startup-Datei, welche beim Ausführen einer nicht interaktiven Shell (bspw. Shellscript) zusätzlich ausgeführt wird. Meistens mit .bashrc belegt.
$ENV x Die Startup-Datei, welche von der Korn-Shell bei jeder weiteren Shell gestartet wird. Der Wert ist meistens mit der Datei .kshrc belegt.
$HOME/.bash_logout x Diese Datei kann bei einer Beendigung bzw. Abmeldung aus einer Login-Shell für Aufräumarbeiten verwendet werden.
/etc/inputrc x In dieser Datei wird die systemweite Vorbelegung der Tastatur für die Bash und andere Programme definiert, welche die C-Funktion readline zum Lesen der Eingabe verwenden. Veränderungen sind dem Systemadministrator (root) vorbehalten.
$HOME/.inputrc x Wie /etc/inputrc, nur dass hier der normale Benutzer eigene Einstellungen vornehmen darf.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
 << zurück
  
  Zum Katalog
Zum Katalog: Shell-Programmierung
Shell-Programmierung
bestellen
 Buchtipps
Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-Server






 Linux-Server


Zum Katalog: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Katalog: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Katalog: Linux Handbuch






 Linux Handbuch


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de