【发布时间】:2016-03-10 20:28:33
【问题描述】:
我正在尝试使用 ffprobe 获取 OSX sh 脚本中的音频类型:ffprobe "$i" |& egrep -ci "vorbis|aac" 它适用于 tcsh 中的 cli,但不适用于脚本。 |& 似乎在脚本内部不起作用。 |& 重定向 ffprobe 的输出,否则 ffprobe 会打印到 cli。任何帮助表示赞赏。
##mkv files
for i in "$input"*.mkv ; do
if [ -e "$i" ] ; then
##1st check type(vorbis|aac)
type=$(/usr/local/bin/ffprobe "$i" |& egrep -i "vorbis|aac")
echo "Test: $type"
##just get audio format
type=$(/usr/bin/perl -e '$_=@ARGV[0];if (/(aac|vorbis)/ig) {print $1;}' "$type")
echo "Type: $type"
exit
fi
done
我得到的错误是:
command substitution: line 46: syntax error near unexpected token `&'
command substitution: line 46: `/usr/local/bin/ffprobe "$i" |& egrep -i "vorbis|aac"'
【问题讨论】:
-
你为什么需要
|&(我通常不使用它,所以我不记得它是什么了)。你不能只做ffprobe "$i" | grep -i ...吗?此外,您的代码看起来像bash或相关的 shell,而不是 tcsh。例如,tcsh使用endif,而不是fi。祝你好运。 -
为什么你认为这是一个
tcsh脚本?这看起来像一个 Bourne shell 脚本。|&不是标准的 Bourne shell 构造,仅适用于bash以及可能的其他一些 Bourne shell 扩展(csh也有它)。如果您使用bash运行此脚本,它应该可以正常工作。 -
也许你应该澄清你的问题(edit 文本,还有标签!),并包含实际的错误消息;事实上,我们不得不猜测太多的事情。
-
我一直使用
fi关闭if,它总是有效,所以我从不质疑它。|&确实适用于 tcsh。我已经用错误更新了问题。