Как запустить несколько экземпляров инструмента командной строки в скрипте bash?+ пользовательский ввод для скрипта - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь запустить несколько экземпляров imagesnap одновременно из одного скрипта bash на Mac.Кроме того, было бы здорово дать (некоторые из) аргументы пользовательским вводом при запуске сценария.

У меня подключено 4 веб-камеры, и я хочу получать серии изображений с каждой камеры с заданным интервалом.Будучи абсолютным новичком в написании сценариев bash, я не знаю, с чего начать поиск.Я проверил, что 4 экземпляра imagesnap прекрасно работают при запуске их вручную из терминала, но это все.

Подводя итог, я хочу создать скрипт bash, который:

  • запускать несколько экземпляров imagesnap.
  • имеет пользовательский ввод для некоторых аргументов для imagesnap.
  • в идеале запускать все экземпляры imagesnap практически (почти) одновременно.

- РЕДАКТИРОВАТЬ -

Подумав об этом, я смутно представляю, как этот сценарий можно организовать, используя возможность делать интервальные изображения с imagesnap -t x.xx:

  • Запуск нескольких сценариев из основного сценария

или

  • Использование подоболочек для запуска нескольких экземпляров imagesnap

  • Запускайте каждый вспомогательный сценарий или подоболочку параллельно, если это возможно.

  • Поскольку каждый экземпляр imagesnap будет работать до завершения, он будетбыло бы здорово, если бы их всех можно было остановить одной командой

1 Ответ

0 голосов
/ 30 декабря 2018

следующий быстрый хак (сохраненный как run-periodically.sh) может сделать правильную вещь:

#!/bin/bash

interval=5
start=$(date +%s)

while true; do
    # run jobs in the background
    for i in 1 2 3 4; do
        "$@" &
    done
    # wait for all background jobs to finish
    wait
    # figure out how long we have to sleep
    end=$(date +%s)
    delta=$((start + interval - end))
    # if it's positive sleep for this amount of time
    if [ $delta -gt 0 ]; then
        sleep $delta || exit
    fi
    start=$((start + interval))
done

если вы поместите этот скрипт в подходящее место и сделаете его исполняемым, вы можете запустить его следующим образом:

run-periodically.sh imagesnap arg1 arg2

но во время тестирования я запустил:

sh run-periodically.sh sh -c "date; sleep 2"

, что приведет к параллельному запуску четырех копий «запуска оболочки, которая отображает дату, а затем ждет пару секунд».interval секунд.если вы хотите запускать разные вещи в разных заданиях, то вы можете явно включить их в этот скрипт или, может быть, в другой скрипт, который он вызывает ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...