LINUX.ORG.RU

Скрипт летит по коду без остановок на wait $pid

 , ,


0

1

Есть такой код (как пример):

#!/usr/bin/env bash
set -x
gnome-terminal -- watch -n 3 df -h &
pid_gnome_watch=$!
echo $pid_gnome_watch
wait $pid_gnome_watch
kill $pid_gnome_watch
echo "It's done!"
ls
set +x

При запуске, выдает такие логи (установил set +- для отладки):

+ set +x
$ ./wait_test.sh 
+ pid_gnome_watch=33410
+ echo 33410
33410
+ wait 33410
+ gnome-terminal -- df -h
+ kill 33410
./wait_test.sh: line 7: kill: (33410) - No such process
+ echo 'It'\''s done!'
It's done!
+ ls
[СПИСОК ФАЙЛОВ]
+ set +x

Wait не держит выполнение скрипта до завершения процесса. Команды выполняются одна за другой без какой-либо задержки. Мне нужно, чтобы выполнение скрипта приостановилось дальше, пока не завершится команда gnome-terminal -- watch -n 3 df -h - с любым статусом, хоть true, хоть false или ещё как-то, лишь бы скрипт ожидал завершения этой команды и гнал уже дальше.

Почему не срабатывает wait?

P.S. Пробовал разные лайфхаки с &&, true … не помогло.

Решение:

#!/usr/bin/env bash

gnome-terminal --wait -- watch -n 3 df -h

[ЛЮБОЙ КОД ДАЛЬШЕ - не выполняется до тех пор, пока команда выше не завершится чем-то]
★★★★★

Последнее исправление: Desmond_Hume (всего исправлений: 4)

Если тебе прям нужно чтобы это с gnome-terminal работало, у него есть параметр --wait.

gnome-terminal --wait -- watch -n 3 df -h &
Kron4ek ★★★★★
()
Ответ на: комментарий от Kron4ek

О, помогло! Хоть и хотелось бы с этими wait’ами разобраться … только помогло без заведения в фон, без & на конце.

Desmond_Hume ★★★★★
() автор топика
Последнее исправление: Desmond_Hume (всего исправлений: 1)
Ответ на: комментарий от iron

Пробовал pidwait --ns $pid_gnome_watch - очень похоже на то, что нужно, но он просто тупо останавливается и всё, дальше не выполняется.

Desmond_Hume ★★★★★
() автор топика
Ответ на: комментарий от Desmond_Hume

Проблема не в скрипте, проблем в гномтерминале. Тебе же в логах всё написало: гномтерминал уже завершился, ждать некого. Он и правда сразу завершается, если --wait ему не прописать, а окно рисует другой процесс, не тот который ты из шелла вызвал.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Да, без опции –wait в gnome-terminal было бы грустно. Они как знали предусмотрели её).

Desmond_Hume ★★★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.