это общий сценарий, который вы ищете. Единственным недостатком является то, что ваши команды заключены в кавычки, что означает, что подсветка синтаксиса через вашу IDE не будет работать. В противном случае я попробовал несколько других ответов, и это лучший. Этот ответ включает идею использования wait
, данную @Michael, но идет еще дальше, используя команду trap
, которая, кажется, работает лучше всего.
#!/usr/bin/env bash
set -m # allow for job control
EXIT_CODE=0; # exit code of overall script
function handleJobs() {
for job in `jobs -p`; do
echo "PID => ${job}"
CODE=0;
wait ${job} || CODE=$?
if [[ "${CODE}" != "0" ]]; then
echo "At least one test failed with exit code => ${CODE}" ;
EXIT_CODE=1;
fi
done
}
trap 'handleJobs' CHLD # trap command is the key part
DIRN=$(dirname "$0");
commands=(
"{ echo 'a'; exit 1; }"
"{ echo 'b'; exit 0; }"
"{ echo 'c'; exit 2; }"
)
clen=`expr "${#commands[@]}" - 1` # get length of commands - 1
for i in `seq 0 "$clen"`; do
(echo "${commands[$i]}" | bash) & # run the command via bash in subshell
echo "$i ith command has been issued as a background job"
done
wait; # wait for all subshells to finish
echo "EXIT_CODE => $EXIT_CODE"
exit "$EXIT_CODE"
# end
спасибо @michael homer за то, что направил меня на правильный путь, но использование команды trap
- лучший подход AFAICT.
Нет никакой разницы, эти три пути эквивалентны. Это общая особенность *мира nix :порядок переключателей командной строки (обычно, не всегда )не имеет значения. По той же причине эти две команды идентичны:
$ ls -l file
-rw-r--r-- 1 chapplec chapplec 100 Apr 18 15:07 file
$ ls file -l
-rw-r--r-- 1 chapplec chapplec 100 Apr 18 15:07 file
Или эти три:
$ grep -i foobar file
fooBar
$ grep foobar -i file
fooBar
$ grep foobar file -i
fooBar
По сути, когда программа видит аргумент, начинающийся с -
, она считывает его как опцию, и позиция этого аргумента не имеет значения. Вот почему у нас есть--
для обозначения конца аргументов.
Ответ: это не имеет значения для apt -get, все пути верны, хотя если вы используете
apt-get --help
вы получите вывод--
apt 1.2.19 (amd64)
Usage: apt-get [options] command
apt-get [options] install|remove pkg1 [pkg2...]
apt-get [options] source pkg1 [pkg2...]
, в котором говорится, что параметры должны быть перед командой apt -get, по крайней мере, согласно документам.