我尝试使用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"'
答案 0 :(得分:0)
您正试图在tcsh
脚本中使用sh
语法;虽然你似乎不知道它们是两种不同的语言,但这不起作用的事实应该不足为奇。
对于您的脚本来说,最简单的直接解决方案可能是在bash
而不是sh
中运行它,前者支持您尝试使用的tcsh
语法,而不仅仅是巧合但是因为它保留了tcsh
中许多好的和不太好的想法,同时保留了与POSIX sh
的完全向后兼容性。
假设您想要的信息打印到标准输出py ffprobe
,您还可以切换到常规管道,并保留sh
shebang行。无论哪种方式,都不建议用sh
显式调用脚本 - 只需将文件标记为可执行文件并直接调用它,系统将使用shebang指定的任何解释器(相反,如果shebang将被忽略,那么它将被忽略。你明确指定了一个解释器。)
对于脚本和交互式使用应该避免tcsh
达成广泛的共识 - 我建议您考虑切换到bash
以进行交互式使用,这将统一显示您的语法已经用于具有交互式使用语法的脚本。实际上,通过使用不兼容的交互式shell,您目前错过了shell的一个吸引人的功能。
tcsh
修复了csh
中的大量错误和不一致问题,但许多仍然存在。切换到主导shell之一还将为您提供更广泛的帮助,学习和故障排除资源网络,以支持您。