Am 27.01.23 um 15:18 schrieb Alexander Goetzenstein:
> ein Script soll mit der Ausführung pausieren, bis ein Prozess (hier:
> unison) beendet ist. Das habe ich im ersten Anlauf so versucht:
>
> while [ $(ps ax | grep ' unison ' | grep -v grep) == '' ]
> do
> echo 'unison läuft noch, warte auf Beendigung...'
> sleep 10
> done
>
> Das funktioniert so nicht, da es auf einen Fehler:
>> -bash: [: ==: Einstelliger (unärer) Operator erwartet.
Dieser Fehler entsteht, weil Du wahrscheinlch '!=', nicht '==',
schreiben wolltest ('==' gibt es nicht, das wäre '='). Außerdem
fehlen da Anführungszeichen, denn Deine Pipe kann Leerzeichen
ausgeben:
while [ "$(ps ax | grep ' unison ' | grep -v grep)" != '' ]
Jedoch hat `test` für diesen Test eine extra Option (man test):
while [ -n "$(ps ax | grep ' unison ' | grep -v grep)" ]
Das hat immer noch Probleme. Wenn ich zufällig `echo unison`
ausführe z.B. -- Außerdem, warum nach Dingen fragen, die man
nicht braucht, nur um sie dann schwierig rauszufiltern:
while [ -n "$(ps -e -o comm | grep '^unison$')" ]
Das wäre, was Du wolltest. IMO besser, wenn auch nicht perfekt:
unison=$(ps -e -o comm,pid \
| sed -n 's/^unison *\([0-9]*\)$/\1/p')
[ -n "$unison" ] && wait $unison
MfG