我正在使用Mac的Automator对放到Droplet上的文件执行bash脚本。输入从Automator操作收集,并作为参数传递给bash脚本。该脚本适用于单个输入文件,但我无法处理多个文件。
我的最终目标是接受几个丢弃的视频文件,提示输入一个数字,并从每个视频文件中提取该帧数(使用FFmpeg)。
我可以使用特殊变量$@
循环输入,如下所示:
for f in "$@"; do
# perform an action
done
但是,我的脚本还会提示用户输入我不希望包含在此循环中的文本输入。
我可以使用$1
,$2
等单独访问每个输入文件。但我想使用循环而不是单独引用每个文件。此外,输入文件的数量是不可预测的,我不知道如何区分输入文件和输入文本。
如何在不包含文本输入的情况下仅循环文件输入?
以下是我当前工作流程的说明:
获取指定影片
one.mov
two.mov
设置变量值(接受输入)
SOURCE_FILES
询问文字(忽略输入)
输入一个数字:
设置变量值(接受输入)
号
获取变量值(忽略输入)
SOURCE_FILES
获取变量值(接受输入)
号
运行Shell脚本(接受输入,传递"作为参数")
#/bin/bash
for f in "$@"; do
echo $f
done
输出:
/folder/one.mov
/folder/two.mov
8
我希望将一个变量设置为多个输入(因此我可以遍历它),另一个变量设置为数字,但它似乎不会那样工作。
如何在不引用文本输入的情况下遍历每个输入文件?
答案 0 :(得分:2)
只需更改args的顺序:首先获取变量number
的值,
然后得到变量source_files
的值,
这样number
将成为第一个参数,
然后:
echo number: $1
for f in "${@:2}"; do
echo file: $f
done