Möglichkeiten ein Shellskript aufzurufen: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
===bash skript (r)===
+
=== bash skript (r) ===
 
* Starten einer Subshell
 
* Starten einer Subshell
 
* Lesen der Skriptdatei von der Subshell
 
* Lesen der Skriptdatei von der Subshell
Zeile 5: Zeile 5:
 
* Beenden der Subshell und Rückkehr zur aufrufenden Shell
 
* Beenden der Subshell und Rückkehr zur aufrufenden Shell
 
''(Die Shell, die das Skript abarbeitet, kennt den Namen des Shellskriptes)''
 
''(Die Shell, die das Skript abarbeitet, kennt den Namen des Shellskriptes)''
+
 
===bash < skript (r)===
+
=== bash < skript (r) ===
 
* Starten einer Subshell
 
* Starten einer Subshell
 
* Lesen der Skriptdatei von der Subshell
 
* Lesen der Skriptdatei von der Subshell
Zeile 13: Zeile 13:
 
''(Die Shell, die das Skript abarbeitet, kennt den Namen des Shellskriptes nicht)''
 
''(Die Shell, die das Skript abarbeitet, kennt den Namen des Shellskriptes nicht)''
  
===./skript (rx)===
+
=== ./skript (rx) ===
 
* Starten einer Subshell
 
* Starten einer Subshell
 
* Lesen der Skriptdatei von der Subshell
 
* Lesen der Skriptdatei von der Subshell
 
* Kommandos werden nacheinander abgearbeitet  
 
* Kommandos werden nacheinander abgearbeitet  
 
* Beenden der Subshell und Rückkehr zur aufrufenden Shell
 
* 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.)''
+
''(Die Shell, die das Skript abarbeitet, kennt den Namen des Shellskriptes; es muss zusätzlich das Ausführungsrecht gesetzt sein.)''
  
===exec ./skript (rw)===
+
=== exec ./skript (rx) ===
 
* Die Subshell ersetzt die aktuelle Shell (überlädt die aktuelle Shell)
 
* Die Subshell ersetzt die aktuelle Shell (überlädt die aktuelle Shell)
 
* Lesen der Skriptdatei von der Subshell
 
* Lesen der Skriptdatei von der Subshell
Zeile 26: Zeile 26:
 
* Beenden der Subshell; danach ist der Prozess der aufrufenden Shell beendet.
 
* Beenden der Subshell; danach ist der Prozess der aufrufenden Shell beendet.
  
===source skript oder . skript (r)===
+
=== source skript oder . skript (r) ===
 
* Lesen der Skriptdatei von der aktuellen Shell  
 
* Lesen der Skriptdatei von der aktuellen Shell  
 
* Der interaktive Modus der aktuellen Shell wird „unterbrochen“
 
* Der interaktive Modus der aktuellen Shell wird „unterbrochen“
 
* Kommandos werden nacheinander abgearbeitet  
 
* Kommandos werden nacheinander abgearbeitet  
 
''(Es wird kein neuer Prozess gestartet; Variablen haben in dieser Shell Gültigkeit)''
 
''(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?

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?