Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何将Shell脚本中的结果传递到Automator中的下一步_Bash_Macos_Automator - Fatal编程技术网

Bash 如何将Shell脚本中的结果传递到Automator中的下一步

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

我正在使用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 ($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