0

EDITループを分離したので、奇妙な組み込みループのジャンクに遭遇せず、まだセグメンテーション違反が発生しています。以下のコードブロックを更新しました。残念ながら、エコーを追加することはもう機能しないため、「できた!」にはできません。エコーコマンド。

スクリプトの引数からファイルを取得し、それらをビデオと画像シーケンスに分離してからリストに追加するシェル スクリプトがあります。このリストは、後でバッチ エンコーディングのために ffmpeg に渡されます。奇妙なことに、これを行うためにセットアップしたループは、ループの先頭に echo ステートメントを追加しない限り、「Segmentation Fault 11」を返します。見てみな:

## Build list of files to encode, using only files from approved extensions list.
argument_files=()
filelist=()

echo "Building file list."
for argument in $@; do
    OLDIFS=$IFS
    IFS=$'\n'
    argument_files+=($(find "$argument" -type f | grep -e ".*/.*\.\($filters)"))
    IFS=$OLDIFS
done

for thisfile in $argument_files; do
    echo $thisfile
    if [[ "$thisfile" =~ .*\.($sequence_exts) ]]; then
        has_sequences="y"
        inlist="n"
        tempdir=$(dirname "$thisfile")
        tempext=$(basename "$thisfile" | sed 's/.*\.\(.*\)/\1/')
        tempname=$(basename "$thisfile" | sed 's/\(.*\)\..*/\1/')
        collection=$(echo "$tempname" | sed 's/[0-9]*$//')
        chartemp=$(echo "$tempname" | grep -o -m 1 -e '[0-9]*$')

        if [[ "$chartemp" != [0-9]* ]]; then
            continue
        fi

        charcount=`printf "%02d" ${#chartemp}`
        new_path="${tempdir}/${collection}%${charcount}d.${tempext}"

        for e in ${filelist[@]}; do
            if [[ "$e" == "$new_path" ]]; then
                inlist="y"
                break
            fi
        done

        if [[ "$inlist" == "n" ]]; then
            OLDIFS=$IFS
            IFS=$'\n'
            filelist+=("$new_path")
            IFS=$OLDIFS
        fi

    elif [[ "$thisfile" =~ .*\.($mov_exts) ]]; then
        OLDIFS=$IFS
        IFS=$'\n'
        filelist+=("$thisfile")
        IFS=$OLDIFS
    fi
done

echo "I made it!"

ご存知のように、最初の if ステートメントは、イメージ シーケンスをフィルター処理し、それらを ffmpeg が必要とする name%0Nd.jpg 形式に変換するために使用されます。また、同じ画像シーケンスがまだバッチ リストに追加されていないことを確認しようとします。これは私には本当にハッキーに感じます。だったらごめんなさい。

4

1 に答える 1

0

zshが segfault をスローしている場合、それは zsh 自体に非常に問題があることを示しています (ただし、メモリ不良が segfault につながる可能性はわずかにあります) 。

zsh更新を確認したい場合があります。または、代わりのもの (おそらく pdksh または bash) を探します。

スクリプトのミスによってシェルが segfault になることは決してありません。

于 2013-09-15T07:26:55.603 に答える