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