Verschiedene Shells beim Script im Script aufrufen?

A

art

Jungspund
s30a
Code:
#!/bin/sh
X1=x1
X2=x2
X3=x3

s30
Code:
#!/bin/sh
./s30a
echo '$X1: ' $X1
echo '$X2: ' $X2
echo '$X3: ' $X3
echo '( ./s30a ; )'
( ./s30a ; )
echo '$X1: ' $X1
echo '$X2: ' $X2
echo '$X3: ' $X3
echo '{ ./s30a ; }'
{ ./s30a ; }
echo '$X1: ' $X1
echo '$X2: ' $X2
echo '$X3: ' $X3
echo '. ./s30a'
. ./s30a
echo '$X1: ' $X1
echo '$X2: ' $X2
echo '$X3: ' $X3

Ausgabe :

$X1:
$X2:
$X3:
( ./s30a ; )
$X1:
$X2:
$X3:
{ ./s30a ; }
$X1:
$X2:
$X3:
. ./s30a
$X1: x1
$X2: x2
$X3: x3

Meine Frage :
Wir haben also 4 Aufrufmöglichkeiten :
1) ./s30a
2) ( ./s30a ; )
3) { ./s30a ; }
4) . ./s30a
Laut der Ausgabe, heisst es, dass nur im letzten Fall also ". ./s30a" wird
das s30a in der gleichen Shell abgearbeitet..Stimmt es?
Sollte der Aufruf von ./s30a nicht auch in der gleichen Shell passieren?
( ./s30a ; ) sollte per Def. in der anderen Shell ausgeführt werden.
Aber was ist mit 1) und 3) ???
 
Meine Frage :
Wir haben also 4 Aufrufmöglichkeiten :
1) ./s30a
2) ( ./s30a ; )
3) { ./s30a ; }
4) . ./s30a
Hi, ich kenne noch 2 weitere:

5) sh s30a # ist eigentlich das gleiche wie dein '2) ( ./s30a )'
6) s30a # nur wenn 's30a' ausführbar ist (man chmod)

dein '1) ./s30a' benutzt man nur, wenn 's30a' nicht ausführbar ist, ist sonst aber wie 6)

im letzten Fall also ". ./s30a" wird das s30a in der gleichen Shell abgearbeitet.
ja.

Sollte der Aufruf von ./s30a nicht auch in der gleichen Shell passieren?
nein, die ABARBEITUNG erfolgt nicht in der gleichen shell.

( ./s30a ; ) sollte per Def. in der anderen Shell ausgeführt werden.
ja, semikolon ist nicht erforderlich.

'3) { ./s30a ; }' weiß ich leider auch nicht. normalerweise benutzt man das, um befehle zu gruppieren, aber im zusammenhang mit variablen habe ich das auch noch nicht verwendet.
 
Hallo

1) ./skript => Subshell
2) ( ./skript ) => Subshell
3) { ./skript; } => Subshell
4) . ./skript => gleiche Shell

./skript ist nur erforderlich, wenn das aktuelle verzeichnis nicht im $PATH liegt. Sonst geht auch skript, wenn ausführbar.

. <SKRIPT> führt SKRIPT in der gleichen Shell aus (Punkt SKRIPTNAME)
Alternativ geht auch
source skriptname

Teste es selbst:
#!/bin/bash
echo "Ich bin das Skript $0";
echo " Meine PID ist $$";
exit

Gruß Wolfgang
 
dein '1) ./s30a' benutzt man nur, wenn 's30a' nicht ausführbar ist, ist sonst aber wie 6)
falsch, Wolfgangs Aussage ist hier richtig - Du kannst kein Skript so ./skript ausführen, wenn es kein Ausführbarkeitsrecht besitzt!
 

Ähnliche Themen

Queue für copy Script

Shell if-Abfrage mit equal or greater wirft Fehlermeldung unary operator expected

Gleicher Befehl über Script -> Fehler?

Mein erstes größeres Skript.

sed im script per crontab

Zurück
Oben