public inbox for gentoo-user-de@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-user-de] Bash-Skript Frage
@ 2005-08-16 14:16 Volker Katz
  2005-08-16 15:12 ` Emil Beinroth
  2005-08-16 17:14 ` Nils Andresen
  0 siblings, 2 replies; 7+ messages in thread
From: Volker Katz @ 2005-08-16 14:16 UTC (permalink / raw
  To: gentoo-user-de

Moin,
ich habe mal wieder eine kleine Frage zu einem Bash-Skript.

Ich möchte mehrere Programme prallel laufen lassen - soweit ja kein Problem. 
Einfach ein "&" hinter jedes Kommando und gut ist. Nur möchte ich ein 
Kommando erst aufrufen, nachdem alle anderen fertig sind. 

Also in der Art:

/bin/job1 &
/bin/job2 &
/bin/job3 &
while (not job1 finished && not job2 finished && not job3 finished)
/bin/job4

(Natürlich ist mir klar, das aktives Warten nicht schön ist - ich wollte nur 
mein Problem darstellen.)

Wie kann man das elegant machen? Die PIDs merken und in einer Schleife 
kontrollieren? Wie würde soetwas aussehen?

Gruß & Danke
  Volker

-- 
gentoo-user-de@gentoo.org mailing list



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [gentoo-user-de] Bash-Skript Frage
  2005-08-16 14:16 [gentoo-user-de] Bash-Skript Frage Volker Katz
@ 2005-08-16 15:12 ` Emil Beinroth
  2005-08-16 17:14 ` Nils Andresen
  1 sibling, 0 replies; 7+ messages in thread
From: Emil Beinroth @ 2005-08-16 15:12 UTC (permalink / raw
  To: gentoo-user-de

On Tue, Aug 16, 2005 at 04:16:21PM +0200, Volker Katz wrote:
> Moin,
> ich habe mal wieder eine kleine Frage zu einem Bash-Skript.
> 
> Ich möchte mehrere Programme prallel laufen lassen - soweit ja kein Problem. 
> Einfach ein "&" hinter jedes Kommando und gut ist. Nur möchte ich ein 
> Kommando erst aufrufen, nachdem alle anderen fertig sind. 
> 
> Also in der Art:
> 
> /bin/job1 &
> /bin/job2 &
> /bin/job3 &
> while (not job1 finished && not job2 finished && not job3 finished)
> /bin/job4
> 
> (Natürlich ist mir klar, das aktives Warten nicht schön ist - ich wollte nur 
> mein Problem darstellen.)
> 
> Wie kann man das elegant machen? Die PIDs merken und in einer Schleife 
> kontrollieren? Wie würde soetwas aussehen?
> 
> Gruß & Danke
>   Volker

Hi,
wie waers mit sowas?

pids=""
/bin/job1 &
pids="${pids} ${!}"
/bin/job2 &
pids="${pids} ${!}"
/bin/job3 &
pids="${pids} ${!}"
wait $pids
/bin/job4

Cheers, Emil

-- 
gentoo-user-de@gentoo.org mailing list



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [gentoo-user-de] Bash-Skript Frage
  2005-08-16 14:16 [gentoo-user-de] Bash-Skript Frage Volker Katz
  2005-08-16 15:12 ` Emil Beinroth
@ 2005-08-16 17:14 ` Nils Andresen
  2005-08-20  5:01   ` Karsten Schulz
  2005-08-20 10:04   ` [gentoo-user-de] " Thomas Schweikle
  1 sibling, 2 replies; 7+ messages in thread
From: Nils Andresen @ 2005-08-16 17:14 UTC (permalink / raw
  To: gentoo-user-de

Moin,

Volker Katz wrote:

>Also in der Art:
>
>/bin/job1 &
>/bin/job2 &
>/bin/job3 &
>while (not job1 finished && not job2 finished && not job3 finished)
>/bin/job4
>  
>
Macht
( /bin/job1 & /bin/job2 & /bin/job3 ) && /bin/job4
nicht das ?!

Grüße,
Nils


-- 
gentoo-user-de@gentoo.org mailing list



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [gentoo-user-de] Bash-Skript Frage
  2005-08-16 17:14 ` Nils Andresen
@ 2005-08-20  5:01   ` Karsten Schulz
  2005-08-20 10:04   ` [gentoo-user-de] " Thomas Schweikle
  1 sibling, 0 replies; 7+ messages in thread
From: Karsten Schulz @ 2005-08-20  5:01 UTC (permalink / raw
  To: gentoo-user-de

Hi Nils,

ist zwar schon ein paar Tage her, aber für das Archiv ;-):

Am Dienstag, 16. August 2005 19:14 schrieb Nils Andresen:
> Volker Katz wrote:
> >Also in der Art:
> >
> >/bin/job1 &
> >/bin/job2 &
> >/bin/job3 &
> >while (not job1 finished && not job2 finished && not job3 finished)
> >/bin/job4
>
> Macht
> ( /bin/job1 & /bin/job2 & /bin/job3 ) && /bin/job4
> nicht das ?!

nein, Dein Lösungsvorschlag führt job4 nur dann aus, wenn job3 mit einem 
exit code von 0 endet. Dauer und Erfolg von job1 und job2 sind in 
diesem Konstrukt unerheblich.

Gruß
Karsten

-- 
Deutsche Übersetzungen von Fachbegriffen aus der Computerwelt:
Keyboard: Schlüsselbrett

-- 
gentoo-user-de@gentoo.org mailing list



^ permalink raw reply	[flat|nested] 7+ messages in thread

* [gentoo-user-de] Re: Bash-Skript Frage
  2005-08-16 17:14 ` Nils Andresen
  2005-08-20  5:01   ` Karsten Schulz
@ 2005-08-20 10:04   ` Thomas Schweikle
  2005-08-20 10:39     ` Hendrik Jürgens
  1 sibling, 1 reply; 7+ messages in thread
From: Thomas Schweikle @ 2005-08-20 10:04 UTC (permalink / raw
  To: gentoo-user-de

Nils Andresen schrieb:
> Moin,
> 
> Volker Katz wrote:
> 
>> Also in der Art:
>>
>> /bin/job1 &
>> /bin/job2 &
>> /bin/job3 &
>> while (not job1 finished && not job2 finished && not job3 finished)
>> /bin/job4
>>  
>>
> Macht
> ( /bin/job1 & /bin/job2 & /bin/job3 ) && /bin/job4
> nicht das ?!

Nein, macht es nicht:
- job 1 wird im Background ausgeführt
- job 2 wird im Background ausgeführt
- job 3 wird im Vordergrund ausgeführt
nach *erfolgreichem* beenden von job 3 wird job 4 ausgeführt.

Die Klammern um job 1 bis job 3 sorgen nur dafür, dass das Environment
(bis auf den Rückgabewert) nicht verändert wird.

(sleep 60 & sleep 60 & sleep 5) && echo "Fertig!"
ps axf nach 0s:
13619 pts/1    Ss     0:00              \_ -/bin/bash
 2846 pts/1    S+     0:00              |   \_ -/bin/bash
 2847 pts/1    S+     0:00              |       \_ sleep 60
 2848 pts/1    S+     0:00              |       \_ sleep 60
 2849 pts/1    S+     0:00              |       \_ sleep 15

ps axf nach 10s:
 2847 pts/1    S      0:00 sleep 60
 2848 pts/1    S      0:00 sleep 60

ps axf nach 61s:

Die richtige, funktionierende Lösung steht in
<20050816151216.GA32458@stovokor.kiste.lan>

-- 
Thomas
-- 
gentoo-user-de@gentoo.org mailing list



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [gentoo-user-de] Re: Bash-Skript Frage
  2005-08-20 10:04   ` [gentoo-user-de] " Thomas Schweikle
@ 2005-08-20 10:39     ` Hendrik Jürgens
  2005-08-20 13:16       ` Thomas Schweikle
  0 siblings, 1 reply; 7+ messages in thread
From: Hendrik Jürgens @ 2005-08-20 10:39 UTC (permalink / raw
  To: gentoo-user-de

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Thomas Schweikle wrote:
> Nils Andresen schrieb:
> 
>>Moin,
>>
>>Volker Katz wrote:
>>
>>
>>>Also in der Art:
>>>
>>>/bin/job1 &
>>>/bin/job2 &
>>>/bin/job3 &
>>>while (not job1 finished && not job2 finished && not job3 finished)
>>>/bin/job4
>>> 
>>>
>>
>>Macht
>>( /bin/job1 & /bin/job2 & /bin/job3 ) && /bin/job4
>>nicht das ?!
> 
> 
> Nein, macht es nicht:
> - job 1 wird im Background ausgeführt
> - job 2 wird im Background ausgeführt
> - job 3 wird im Vordergrund ausgeführt
> nach *erfolgreichem* beenden von job 3 wird job 4 ausgeführt.
> 
> Die Klammern um job 1 bis job 3 sorgen nur dafür, dass das Environment
> (bis auf den Rückgabewert) nicht verändert wird.
> 
> (sleep 60 & sleep 60 & sleep 5) && echo "Fertig!"
> ps axf nach 0s:
> 13619 pts/1    Ss     0:00              \_ -/bin/bash
>  2846 pts/1    S+     0:00              |   \_ -/bin/bash
>  2847 pts/1    S+     0:00              |       \_ sleep 60
>  2848 pts/1    S+     0:00              |       \_ sleep 60
>  2849 pts/1    S+     0:00              |       \_ sleep 15
> 
> ps axf nach 10s:
>  2847 pts/1    S      0:00 sleep 60
>  2848 pts/1    S      0:00 sleep 60
> 
> ps axf nach 61s:
> 

Tach.

Damit sollte das vielleicht so gehen. Die jobs 1-3 werden im Hintergrund
ausgeführt. Ihre PIDs in den Variablen job1-3 gespeichert und danach auf
das Beenden der Jobs gewartet, bevor job4 ausgeführt wird,

#!/bin/bash
job1 & job1=$!
job2 & job2=$!
job3 & job3=$!
wait $job1
wait $job2
wait $job3
job4

wait $wmpid

- --
Mit freundlichen Grüßen

Hendrik Jürgens
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFDBwhBgL2kQgmW9pgRAi7nAJ9U51o42vlYHY1O3eMZiE5IxI/D5ACfa9+V
L7k/Rq1vzkpYgFYNjK4YHFw=
=4Kz4
-----END PGP SIGNATURE-----
-- 
gentoo-user-de@gentoo.org mailing list



^ permalink raw reply	[flat|nested] 7+ messages in thread

* [gentoo-user-de]  Re: Bash-Skript Frage
  2005-08-20 10:39     ` Hendrik Jürgens
@ 2005-08-20 13:16       ` Thomas Schweikle
  0 siblings, 0 replies; 7+ messages in thread
From: Thomas Schweikle @ 2005-08-20 13:16 UTC (permalink / raw
  To: gentoo-user-de

Hendrik Jürgens schrieb:
> Thomas Schweikle wrote:
>>> Nils Andresen schrieb:
>>> 
>>>>Moin,
>>>>
>>>>Volker Katz wrote:
>>>>
>>>>
>>>>>Also in der Art:
>>>>>
>>>>>/bin/job1 &
>>>>>/bin/job2 &
>>>>>/bin/job3 &
>>>>>while (not job1 finished && not job2 finished && not job3 finished)
>>>>>/bin/job4
>>>>> 
>>>>>
>>>>
>>>>Macht
>>>>( /bin/job1 & /bin/job2 & /bin/job3 ) && /bin/job4
>>>>nicht das ?!
>>> 
>>> 
>>> Nein, macht es nicht:
>>> - job 1 wird im Background ausgeführt
>>> - job 2 wird im Background ausgeführt
>>> - job 3 wird im Vordergrund ausgeführt
>>> nach *erfolgreichem* beenden von job 3 wird job 4 ausgeführt.
>>> 
>>> Die Klammern um job 1 bis job 3 sorgen nur dafür, dass das Environment
>>> (bis auf den Rückgabewert) nicht verändert wird.
>>> 
>>> (sleep 60 & sleep 60 & sleep 5) && echo "Fertig!"
>>> ps axf nach 0s:
>>> 13619 pts/1    Ss     0:00              \_ -/bin/bash
>>>  2846 pts/1    S+     0:00              |   \_ -/bin/bash
>>>  2847 pts/1    S+     0:00              |       \_ sleep 60
>>>  2848 pts/1    S+     0:00              |       \_ sleep 60
>>>  2849 pts/1    S+     0:00              |       \_ sleep 15
>>> 
>>> ps axf nach 10s:
>>>  2847 pts/1    S      0:00 sleep 60
>>>  2848 pts/1    S      0:00 sleep 60
>>> 
>>> ps axf nach 61s:
>>> 
> 
> Tach.
> 
> Damit sollte das vielleicht so gehen. Die jobs 1-3 werden im Hintergrund
> ausgeführt. Ihre PIDs in den Variablen job1-3 gespeichert und danach auf
> das Beenden der Jobs gewartet, bevor job4 ausgeführt wird,
> 
> #!/bin/bash
> job1 & job1=$!
> job2 & job2=$!
> job3 & job3=$!
> wait $job1
> wait $job2
> wait $job3
> job4
> 
> wait $wmpid

Ja. nur gefällt mir die Variante aus
<20050816151216.GA32458@stovokor.kiste.lan> besser. Ich würde hergehen
in das ganze in eine Schleife packen:

for i in job1 job2 job3 jobn; do
  $i & pids="${pids} $!"
done
wait $pids
echo "Fertig!"

noch eleganter:

function waitjob() {
  $* & pids="$pids $!"
}

waitjob job1
waitjob job2
waitjob jobn
wait $pids
echo "Fertig!"

-- 
Thomas

-- 
gentoo-user-de@gentoo.org mailing list



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2005-08-20 13:19 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-08-16 14:16 [gentoo-user-de] Bash-Skript Frage Volker Katz
2005-08-16 15:12 ` Emil Beinroth
2005-08-16 17:14 ` Nils Andresen
2005-08-20  5:01   ` Karsten Schulz
2005-08-20 10:04   ` [gentoo-user-de] " Thomas Schweikle
2005-08-20 10:39     ` Hendrik Jürgens
2005-08-20 13:16       ` Thomas Schweikle

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox