Как вывести код возбуждения после завершения функции - PullRequest
0 голосов
/ 20 ноября 2018

Если в скрипте оболочки.Есть две функции с циклом, и я запускаю обе функции в сценарии и помещаю обе в фоновый режим.

Например:

#!/bin/bash

function a {
  for 1 in 2; do
    if 3.sh; then
       echo 'done'
    else
       exit 1
    fi
  done
}

function b {
  for a in b; do
    if c.sh; then
       echo 'done'
    else
       exit 1
    fi
  done
}

a &
b &

Теперь, когда обе функции находятся в фоновом режиме, как только язапустить скрипт, он будет завершен сразу.Я ожидал, что получу код завершения скрипта, чтобы в случае возникновения ошибок во время цикла a и b я мог получить подтверждение.

Моя другая проблема заключается в том, что если что-то случится во время цикла a, сценарий будет прерван.сразу (так как код выхода 1 задан), так что b также завершается, даже если он невиновен.

1 Ответ

0 голосов
/ 21 ноября 2018

Если вы ожидаете фоновое задание, состояние выхода wait будет статусом завершения задания.

a & a_pid=$!
b & b_pid=$!

wait $a_pid
a_status=$?
wait $b_pid
b_status=$?

Вы можете возразить, что если b завершится раньше a,тогда вам нужно подождать, чтобы получить статус b.Это может быть проблемой, но только если вам есть чем заняться.Независимо от того, какое задание заканчивается первым, время, необходимое для выполнения обоих , одинаково.(Если b завершится первым, то wait $b_pid сразу выйдет после запуска.)

...