GOOGLE ADS

суббота, 30 апреля 2022 г.

как завершить цикл, когда команда заканчивается

У меня есть этот bash-скрипт:

#!/bin/bash
if [ "$#" -eq 4 ]
then
rep_origine="$1"
rep_dest="$2"
temps_exec="$3"
temps_refr="$4"
else
echo "Usage: $0 [files directory] [destination directory] [execution time$
exit 2
fi
cp -R "$rep_origine" "$rep_dest" &
cp_process="$!"
while [ "$cp_process" -eq "$!" ]
do
cp_process="$!"
sleep "$temps_exec"; kill -STOP "$cp_process"
sleep "$temps_refr"; kill -CONT "$cp_process"
done

Я хотел бы, чтобы мой цикл заканчивался, когда заканчивается команда cp. Поэтому я поставил, что когда последний PID не совпадал с PID cp, цикл должен завершаться, но он не работает.

Я не понимаю, как указать, что цикл должен заканчиваться, когда заканчивается команда cp.


Решение проблемы

Я бы использовал killсигнал без вреда, 0чтобы проверить, жив ли процесс:

while kill -0 $cp_process 2>/dev/null
do
# work indicator:
echo -n '.'
sleep 1
done

Если цель состоит в том, чтобы временно остановить процесс в цикле:

while kill -STOP $cp_process 2>/dev/null
do
# do work while the process is stopped here
kill -CONT $cp_process
# give the process execution time:
sleep $temps_exec
done

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...