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

时间:2018-12-29 18:41:16

标签: bash macos webcam

我正在尝试从Mac上的单个bash脚本同时启动imagesnap的多个实例。另外,在运行脚本时通过用户输入提供(某些)自变量也很好。

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

总而言之,我正在寻找一个bash脚本,该脚本:

  • 运行多个图像快照实例。
  • 具有用户输入的imagenap某些参数。
  • 理想情况下(几乎)同时启动所有imagenap实例。

-编辑-

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

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

  • 使用子外壳运行imagesnap

  • 的多个实例
  • 如有可能,并行启动每个子脚本或子shell。

  • 由于imagesnap的每个实例都将运行直到终止,因此如果可以使用单个命令将其全部停止,那就太好了

1 个答案:

答案 0 :(得分:0)

以下快速技巧(保存为public async Task<IEnumerable<Album>> GetAlbums(Artist artist) { return await myDbContext.Artists .Include(artist => artist.Tracks) .ThenInclude(track => track.Album) .Where(a.Id == artist.Id) .Select(artist => artist.Tracks.Select(track => track.Album)) .Distinct() .ToListAsync(); } )可能会做正确的事情:

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" 秒并行运行四个副本“启动一个显示日期的shell,然后等待几秒钟”。如果您想在不同的工作中运行不同的事物,那么您可能希望将它们显式地放入此脚本或该脚本所调用的另一个脚本中……