Я предлагаю вам начать с изменения find.sh
, чтобы его код возврата зависел от его успешности, что позволит нам легче определить успешный вызов;например:
myValue=`sed -n '/VALUE/p' $tempfile | awk 'BEGIN{FS="="} {print substr($2, 8, length($2)-2)}'`
success=$?
echo "$myValue"
exit $success
Чтобы завершить все процессы find.sh
, порожденные вашим сценарием, вы можете использовать pkill
с критериями ID родительского процесса и критериями имени команды:
pkill -P $$ find.sh # $$ refers to the current process' PID
Обратите внимание, что для этого требуется, чтобы вы запускали скрипт find.sh
напрямую, а не передавали его в качестве параметра sh
.Обычно это не должно быть проблемой, но если у вас есть веская причина для вызова sh
вместо сценария, вы можете заменить find.sh
в команде pkill
на sh
(при условии, что вы не порождаете другихскрипты, которые вы не хотели бы убивать).
Теперь, когда find.sh
завершается с успехом только тогда, когда он находит ожидаемую строку, вы можете подключить два действия с помощью &&
и запустить все это в фоновом режиме:
{ find.sh $value $c1 && pkill -P $$ find.sh; } &
Первое вхождение find.sh
, которое завершается успешно, вызовет команду pkill
, которая завершит все остальные (эти уничтоженные процессы будут иметь ненулевые коды выхода и поэтому не будут запускать своисвязанный pkill
).