правильный способ установки пакетов с помощью apt-get, не спрашивая

это общий сценарий, который вы ищете. Единственным недостатком является то, что ваши команды заключены в кавычки, что означает, что подсветка синтаксиса через вашу 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.

1
18.04.2017, 19:45
2 ответа

Нет никакой разницы, эти три пути эквивалентны. Это общая особенность *мира 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

По сути, когда программа видит аргумент, начинающийся с -, она считывает его как опцию, и позиция этого аргумента не имеет значения. Вот почему у нас есть--для обозначения конца аргументов.

1
27.01.2020, 23:34

Ответ: это не имеет значения для 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, по крайней мере, согласно документам.

1
27.01.2020, 23:34

Теги

Похожие вопросы