Subshells in der Bash
Subshells in der Bash
Hallo,
Die Frage klingt vielleicht doof - vielleicht auch nicht ...
Was ist der Sinn einer Subshell? Warum arbeitet man nicht in einer definierten Umgebung?
Weder Google noch meine Literatur brachte ein passendes Ergebnis.
MfG
o.o.m
Die Frage klingt vielleicht doof - vielleicht auch nicht ...
Was ist der Sinn einer Subshell? Warum arbeitet man nicht in einer definierten Umgebung?
Weder Google noch meine Literatur brachte ein passendes Ergebnis.
MfG
o.o.m
-
- Beiträge: 2493
- Registriert: 01.10.2006 13:19:37
- Lizenz eigener Beiträge: GNU General Public License
Re: Subshells in der Bash
Hallo,
hier hab ich mal einen Link der etwas über subshell sag:
http://tldp.org/LDP/abs/html/subshells.html
ich habe da mal google übersetzen lassen http://debianforum.de/forum/pastebin.ph ... ew&s=34743
das war wohl nicht so gut, sorry, das sollte jetzt besser sein:
http://translate.google.de/translate?hl ... e%26sa%3DG
hilft dir das weiter?
hier hab ich mal einen Link der etwas über subshell sag:
http://tldp.org/LDP/abs/html/subshells.html
ich habe da mal google übersetzen lassen http://debianforum.de/forum/pastebin.ph ... ew&s=34743
das war wohl nicht so gut, sorry, das sollte jetzt besser sein:
http://translate.google.de/translate?hl ... e%26sa%3DG
hilft dir das weiter?
Gruß niesommer
Re: Subshells in der Bash
Das schöne an einer Subshell ist, dass du darin die Umgebung beliebig manipulieren kannst, aber wenn du sie wieder verlassen hast, dir sicher sein kannst, dass alles wieder wie vorher ist.oom hat geschrieben: Was ist der Sinn einer Subshell? Warum arbeitet man nicht in einer definierten Umgebung?
Use ed once in a while!
Re: Subshells in der Bash
... um es eben noch zu erwähnen:
... mir ist man mit der o.g. Frage in den Rücken gefallen. Selbst wäre ich vermutlich nicht auf diese Frage gekommen.
MfG
o.o.m
... mir ist man mit der o.g. Frage in den Rücken gefallen. Selbst wäre ich vermutlich nicht auf diese Frage gekommen.
MfG
o.o.m
Re: Subshells in der Bash
Danke für die Zusatzinformation.oom hat geschrieben:... um es eben noch zu erwähnen:
Wie meinst du ``in den Rücken gefallen''? War es eine Prüfungssituation?... mir ist man mit der o.g. Frage in den Rücken gefallen. Selbst wäre ich vermutlich nicht auf diese Frage gekommen.
Dann hätte ich zuerst mal zurückgefragt: Was genau ist mit der ``Subshell'' gemeint? Das Syntax-Konstrukt (= runde Klammern) der Shell, oder grundsätzlich das Aufrufen einer Shell in einer Shell, oder was weiß ich?
Erst wenn man das weiß kann man wirklich argumentieren.
(Ich diskutiere gerne noch ein bisschen auf dem Thema rum, wenn noch andere dabei sind.)
Use ed once in a while!
Re: Subshells in der Bash
Mit(Ich diskutiere gerne noch ein bisschen auf dem Thema rum, wenn noch andere dabei sind.)
![Debian](/pics/debianpackage.png)
Code: Alles auswählen
2660 ? Ss 0:07 /usr/bin/SCREEN -xRR
2661 pts/1 Ss+ 0:00 \_ /bin/bash
2662 pts/2 Ss+ 0:00 \_ /bin/bash
2677 pts/3 Ss+ 0:00 \_ /bin/bash
Re: Subshells in der Bash
Wie hast du die Ausgabe erzeugt? Scheint sowas wie `ps f' zu sein.uname hat geschrieben: Mitscreen kann man Subshells visualisieren. [...]
Code: Alles auswählen
2660 ? Ss 0:07 /usr/bin/SCREEN -xRR 2661 pts/1 Ss+ 0:00 \_ /bin/bash 2662 pts/2 Ss+ 0:00 \_ /bin/bash 2677 pts/3 Ss+ 0:00 \_ /bin/bash
Letztlich ist das auch nur eine Visualisierung vom Prozessbaum (pstree). Ob es sich um Subshells (was auch immer man darunter verstehen will) oder irgendwelchen andere Kind-Prozesse handelt ist gleich.
Ich vermute dass es bei der ursprünglichen Frage um die runden Klammern der Shell-Syntax ging, denn alles andere läuft ja nur auf Forks hinaus. Und da ist es dann egal ob ein Prozess eine Shell ist oder ein anderes Programm ... eine Shell ist ja auch nur ein Programm wie jedes andere.
btw: ein paar Versuche (getestet mit der ksh):
Code: Alles auswählen
$ sleep 60 # ist ein built-in und wird vom sh-Prozess ausgeführt
$ /bin/sleep 60 # ist ein externes Programm und wird abgeforked
$ ( /bin/sleep 60 ) # erzeugt eine Subshell die dann /bin/sleep abforked
$ ( sleep 60 ) # läuft komplett in der einen Shell (hätte erwartet, dass eine weitere ksh abgeforked wird ... aber vermutlich ist das eine Performanceoptimierung.)
@oom: Bitte teile uns noch mit wie genau die Fragestellung gemeint war.
Use ed once in a while!
Re: Subshells in der Bash
... Stell Dir einfach vor Du sitzt an Deinem Server um etwas zu konfigurieren. Auf einmal steht Deine Frau oder Freundin hinter Dir und fragt Dich: "Wo is' denn da eigentlich der Mauszeiger?"
Soviel dazu:
Die Frage habe ich hier letztendlich so weitergeben wie man sie mir gestellt hat. Er meint damit, wqarum man nicht nur eine einzige Shell zur Verfügung hat. Alles was er in dieser Shell schraubt, läuft auch nur in dieser einen Shell ab. Es entstehen also keine Subshells oder wie ich mal gelernt habe - keine Kind-Shells.
MfG
o.o.m
Soviel dazu:
Klar soweit?;)... mir ist man mit der o.g. Frage in den Rücken gefallen
Die Frage habe ich hier letztendlich so weitergeben wie man sie mir gestellt hat. Er meint damit, wqarum man nicht nur eine einzige Shell zur Verfügung hat. Alles was er in dieser Shell schraubt, läuft auch nur in dieser einen Shell ab. Es entstehen also keine Subshells oder wie ich mal gelernt habe - keine Kind-Shells.
MfG
o.o.m
Re: Subshells in der Bash
Du wurdest also von einem gefragt der Unix nicht, oder kaum, kennt.oom hat geschrieben:... Stell Dir einfach vor Du sitzt an Deinem Server um etwas zu konfigurieren. Auf einmal steht Deine Frau oder Freundin hinter Dir und fragt Dich: "Wo is' denn da eigentlich der Mauszeiger?"
Soviel dazu:
Klar soweit?;)... mir ist man mit der o.g. Frage in den Rücken gefallen
Die Frage habe ich hier letztendlich so weitergeben wie man sie mir gestellt hat.
Sieh es so: Dadurch, dass du die Frage nicht sofort beantworten konntest, hast du nun einiges gelernt.
![Smile :-)](./images/smilies/icon_smile.gif)
Man könnte diese eine Shell ja auch gleich zu *der* System-Shell machen ... usw.Er meint damit, wqarum man nicht nur eine einzige Shell zur Verfügung hat. Alles was er in dieser Shell schraubt, läuft auch nur in dieser einen Shell ab.
Das Tolle an Unix ist eben, dass es sich um sowas gar nicht kümmert. Stattdessen gibt es wenige grundlegende und klar definierte Konzepte die sehr flexibel sind. Z.B. fork und exec; damit kann man dann machen was man will. Oder Login-Shells -- niemand sagt dass deine Login-Shell eine Shell sein muss ... sie kann jedes beliebige Programm sein.
So ist das Starten einer Shell in einer Shell letztlich auch nur ein Ergebnis der Möglichkeit in einer Shell beliebige Programme zu starten. (Soweit jedenfalls zum allgemeinen Kindprozess-Thema.)
Dass Shells dieses runde-Klammern-Konstrukt haben macht das Starten einer Shell in der Shell nur bequemer. ... aber was rede ich da schon: Es gibt nunmal nicht *die* Shell für Unix. Wenn du eine verwendest die so ein Syntaxkonstrukt nicht anbietet, dann musst du halt die Subshell herkömmlich starten: sh -c 'foo'
Use ed once in a while!