Möglichkeiten ein Shellskript aufzurufen: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 33: Zeile 33:
  
 
= Aufgaben =
 
= Aufgaben =
 +
;Hinweis
 +
* '''$0''' enthält den Namen des aktuell ausgeführten Skripts oder Befehls.
 +
* '''$$''' enthält die Prozess-ID (PID) der Shell, in der das Skript läuft.
 +
* Beide gehören zu den sogenannten '''Spezialvariablen''', die in einem späteren Kapitel ausführlich behandelt werden.
  
== Aufgabe 1 – Skript erstellen ==
+
 
 +
== Aufgabe – Skript erstellen ==
 
* Erstellen Sie ein einfaches Skript mit dem Namen '''skript''', das folgende Befehle enthält:
 
* Erstellen Sie ein einfaches Skript mit dem Namen '''skript''', das folgende Befehle enthält:
 
** date
 
** date
Zeile 41: Zeile 46:
 
** echo $$
 
** echo $$
  
== Aufgabe 2 Verschiedene Aufrufarten testen ==
+
== Aufgabe 2 - Verschiedene Aufrufarten testen ==
 
* Führen Sie das Skript nacheinander auf die folgenden Arten aus:
 
* Führen Sie das Skript nacheinander auf die folgenden Arten aus:
 
** '''bash skript'''
 
** '''bash skript'''
Zeile 50: Zeile 55:
 
* Beobachten und notieren Sie, welche Unterschiede Sie feststellen.
 
* Beobachten und notieren Sie, welche Unterschiede Sie feststellen.
  
== Aufgabe 3 – Auswertung ==
+
== Aufgabe – Auswertung ==
 
* Beantworten Sie die folgenden Fragen:
 
* Beantworten Sie die folgenden Fragen:
 
** Welche Varianten starten eine neue Subshell?
 
** Welche Varianten starten eine neue Subshell?

Aktuelle Version vom 17. Oktober 2025, 13:53 Uhr

bash skript (r)

  • Starten einer Subshell
  • Lesen der Skriptdatei von der Subshell
  • Kommandos werden nacheinander abgearbeitet
  • Beenden der Subshell und Rückkehr zur aufrufenden Shell

(Die Shell, die das Skript abarbeitet, kennt den Namen des Shellskriptes)

bash < skript (r)

  • Starten einer Subshell
  • Lesen der Skriptdatei von der Subshell
  • Kommandos werden nacheinander abgearbeitet
  • Beenden der Subshell und Rückkehr zur aufrufenden Shell

(Die Shell, die das Skript abarbeitet, kennt den Namen des Shellskriptes nicht)

./skript (rx)

  • Starten einer Subshell
  • Lesen der Skriptdatei von der Subshell
  • Kommandos werden nacheinander abgearbeitet
  • Beenden der Subshell und Rückkehr zur aufrufenden Shell

(Die Shell, die das Skript abarbeitet, kennt den Namen des Shellskriptes; es muss zusätzlich das Ausführungsrecht gesetzt sein.)

exec ./skript (rx)

  • Die Subshell ersetzt die aktuelle Shell (überlädt die aktuelle Shell)
  • Lesen der Skriptdatei von der Subshell
  • Kommandos werden nacheinander abgearbeitet
  • Beenden der Subshell; danach ist der Prozess der aufrufenden Shell beendet.

source skript oder . skript (r)

  • Lesen der Skriptdatei von der aktuellen Shell
  • Der interaktive Modus der aktuellen Shell wird „unterbrochen“
  • Kommandos werden nacheinander abgearbeitet

(Es wird kein neuer Prozess gestartet; Variablen haben in dieser Shell Gültigkeit)

Aufgaben

Hinweis
  • $0 enthält den Namen des aktuell ausgeführten Skripts oder Befehls.
  • $$ enthält die Prozess-ID (PID) der Shell, in der das Skript läuft.
  • Beide gehören zu den sogenannten Spezialvariablen, die in einem späteren Kapitel ausführlich behandelt werden.


Aufgabe – Skript erstellen

  • Erstellen Sie ein einfaches Skript mit dem Namen skript, das folgende Befehle enthält:
    • date
    • hostname
    • echo $0
    • echo $$

Aufgabe 2 - Verschiedene Aufrufarten testen

  • Führen Sie das Skript nacheinander auf die folgenden Arten aus:
    • bash skript
    • bash < skript
    • ./skript
    • exec ./skript
    • source skript bzw. . skript
  • Beobachten und notieren Sie, welche Unterschiede Sie feststellen.

Aufgabe – Auswertung

  • Beantworten Sie die folgenden Fragen:
    • Welche Varianten starten eine neue Subshell?
    • Bei welchen Varianten bleibt die aktuelle Shell erhalten?
    • Bei welchen Aufrufen kennt die Shell den Namen des Skripts ($0)?
    • Bei welchen bleibt die Prozess-ID ($$) gleich?