Как обнаружить много команд успеха или нет в bash? - PullRequest
1 голос
/ 06 ноября 2019

У меня есть поиск how to detect the a command success or not in bash. Например: https://askubuntu.com/questions/29370/how-to-check-if-a-command-succeeded/29379#29379 Кто-то предположил, что использование $? для определения команды является успешным или нет.

Я хочу выполнить много задач и проверить, работает ли задача ОК.

Сначала я бегу и проверяю один за другим. Это в последовательном порядке.

# first
./a.out
if [ "$?" -ne "0" ]; then
    echo "code error!"
fi
# second
./b.out
if [ "$?" -ne "0" ]; then
    echo "code error!"
fi
# third
./c.out
if [ "$?" -ne "0" ]; then
    echo "code error!"
fi

Между заданием нет зависимости, поэтому я хочу перенести скрипт в параллельный путь. Я хочу отправить команду в фоновом режиме и выполнить проверку после завершения команды. Я хочу что-то вроде следующего:

# submit all task to back ground
./a.out &
./b.out &
./c.out &

# wait they all finished ...
# wait a
# wait b
# wait c

# do some check ...
# check a
# check b
# check c

Я не знаю, как это понять ...

Может кто-нибудь мне помочь? Спасибо за ваше время.

1 Ответ

2 голосов
/ 06 ноября 2019

С Человек ожидания (1) :

СТАТУС ВЫХОДА top

   If one or more operands were specified, all of them have terminated
   or were not known by the invoking shell, and the status of the last
   operand specified is known, then the exit status of wait shall be the
   exit status information of the command indicated by the last operand
   specified. [...]

Это будет выглядеть так:

# submit all task to back ground
./a.out &
apid=$!
./b.out &
bpid=$!
./c.out &
cpid=$!

# wait they all finished ...
wait "$apid"
aret=$?
wait "$bpid"
bret=$?
wait "$cpid"
cret=$?

# do some check ...
if ((aret)); then
   echo a failed
fi
if ((bret)); then
   echo b failed
fi
if ((cret)); then
   echo c failed
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...