* [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