Bash 如何将Shell脚本中的结果传递到Automator中的下一步
我正在使用automator创建查找服务,以获取所有选定视频的长度并显示在对话框中 因此,服务的工作方式如下: 我选择了一堆视频 我右键单击并运行该服务。 我在网上找到了这个Bash脚本,它工作得非常好Bash 如何将Shell脚本中的结果传递到Automator中的下一步,bash,macos,automator,Bash,Macos,Automator,我正在使用automator创建查找服务,以获取所有选定视频的长度并显示在对话框中 因此,服务的工作方式如下: 我选择了一堆视频 我右键单击并运行该服务。 我在网上找到了这个Bash脚本,它工作得非常好 times=() for f in *.mov; do _t=$(ffmpeg -i "$f" 2>&1 | grep "Duration" | grep -o " [0-9:.]*, " | head -n1 | tr ',' ' ' | awk -F: '{ print
times=()
for f in *.mov; do
_t=$(ffmpeg -i "$f" 2>&1 | grep "Duration" | grep -o " [0-9:.]*, " | head -n1 | tr ',' ' ' | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }')
times+=("$_t")
done
echo "${times[@]}" | sed 's/ /+/g' | bc
我正在尝试将其应用于automator。因此,我目前的服务相当于:
我有一个从Finder接收电影文件并传递到这个RunShell脚本的第一步
我被迫将for循环更改为这个
for f in "$@"; do
我知道这是automator枚举所有接收文件的方式。文件作为参数接收
我已将最后一行改为
total="${times[@]}" | sed 's/ /+/g' | bc
创建一个名为total的变量,该变量可以保存所有视频的总秒数
现在我需要将这个变量传递到下一步,并在对话框中显示它
两个问题:
我该怎么做?
我所做的更改是否正确?
谢谢,将shell脚本中的for循环更改为:
for f in *.mov; do
到
这是正确的。$@是传递给shell脚本的所有参数,在您的场景中,shell脚本将是每个选定电影文件的路径名
现在我需要将这个变量传递到下一步,并在对话框中显示它
要实现这一点,您需要:
shell脚本末尾的总数。因此,将第二个示例shell脚本中的最后一行更改为以下内容:
时代=
以$@表示的f;做
_t=$ffmpeg-i$f2>&1 | grep Duration | grep-o[0-9:.]*,|\
head-n1 | tr','''awk-F:'{打印$1*3600+$2*60+$3}'
次数+=$\t
完成
echo${times[@]}| sed's/+/+/g'| bc辉煌!但我被迫做了一个改变,让它为我工作:将dialogText设置为totalDuration as text&seconds。“告诉应用程序查找器显示”对话框可以替换为“仅显示”对话框。。。。完美的谢谢@太空狗-谢谢,是的,我意识到文本部分缺失了总持续时间。
for f in *.mov; do
for f in "$@"; do