如何在bash脚本中运行命令行工具的多个实例?+脚本的用户输入



我正试图从Mac上的单个bash脚本同时启动imagesnap的多个实例。此外,在运行脚本时,最好通过用户输入给出(一些)参数。

我连接了4个网络摄像头,希望以给定的间隔从每个摄像头拍摄一系列图像。作为bash脚本的绝对初学者,我不知道从哪里开始搜索。我已经测试过4个imagesnap实例在从终端手动运行时工作得很好,但仅此而已

总之,我希望制作一个bash脚本:

  • 运行多个imagesnap实例
  • 为imagesnap的一些参数提供了用户输入
  • 理想情况下,在(几乎)同一时间启动所有imagesnap实例

--编辑--

经过思考,我对如何使用imagesnap -t x.xx:拍摄间隔图像的能力来组织这个脚本有了一个模糊的想法

  • 从主脚本中运行多个脚本

  • 使用子shell运行imagesnap的多个实例

  • 如果可能的话,并行启动每个子脚本或子shell。

  • 由于imagesnap的每个实例都将运行到终止,如果它们都能用一个命令停止,那就太好了

以下快速破解(保存为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秒并行运行四个"启动一个显示日期的shell,然后等待几秒钟"的副本。如果你想在不同的作业中运行不同的东西,那么你可能想把它们明确地放进这个脚本中,或者可能放进另一个脚本中,这个脚本称之为…

最新更新