0

shffprobe を使用して OSX スクリプトでオーディオ タイプを取得しようとしています。cliffprobe "$i" |& egrep -ci "vorbis|aac"からは機能しtcshますが、スクリプトからは機能しません。|&スクリプト内からは機能しないようです。|&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"'
4

1 に答える 1

0

スクリプトtcshで構文を使用しようとしています。shこれが機能しないという事実は驚くべきことではありませんが、これらが 2 つの異なる言語であることを認識していないようです。

おそらく、スクリプトの最も簡単な即時の解決策は、 のbash代わりにスクリプトを実行することですsh。前者は、tcsh使用しようとした構文をサポートしています。これは、偶然ではなく、 から多くの優れたアイデアとあまり良くないアイデアを借用しているためですtcsh。 POSIX との下位互換性sh

必要な情報が標準出力 pyffprobeに出力されると仮定すると、通常のパイプに切り替えて、shシバン行を保持することもできます。いずれにせよ、スクリプトを明示的に呼び出すことshはあまりお勧めできません。ファイルを実行可能としてマークして直接呼び出すだけで、システムはシバンが指定するインタープリターを使用します (逆に、インタープリターを明示的に指定すると、シバンは単純に無視されます)。 )。

スクリプトとインタラクティブな使用の両方で回避する必要があるという幅広いコンセンサスがあります.インタラクティブな使用tcshに切り替えることも検討することをお勧めしますbash. 実際、現在、互換性のない対話型シェルを使用することで、シェルの魅力的な機能の 1 つを逃しています。

Tom Christiansencsh.whynotは、C シェルの標準的な参照批判です。tcshからのかなりの数のバグと矛盾が修正されていcshますが、多くはまだ残っています。主要なシェルの 1 つに切り替えると、ヘルプ、学習、およびトラブルシューティング リソースの幅広いネットワークが提供され、サポートされます。

于 2015-12-06T12:05:32.027 に答える