「if文」でこれは許可されていますか? [閉鎖]

「if文」でこれは許可されていますか? [閉鎖]
# optional cropping
if [ "$1" == "cropit" ]; then
   ITS_CROP_TIME=
   mkdir cropped; for i in *.mp4; do ffmpeg -i "$i" -filter:v "crop=1920:980:0:-100" cropped/"${i%.*}.mp4"
   rm -r *.mp4
   cd cropped
   cp -r *.mp4 ../
fi
# optional cropping

このように文字列を使用できますかITS_CROP_TIME=(下のコードの出力をキャプチャするために)?この変数をスクリプトのどこかに配置すると、変数定義でコマンドが実行されますか?

これはどうですか?これはうまくいくでしょうか?

if [ "$1" == "cropit" ]; then
   ITS_CROP_TIME=mkdir cropped; for i in *.mp4; do ffmpeg -i "$i" -filter:v "crop=1920:980:0:-100" cropped/"${i%.*}.mp4"; rm -r *.mp4; cd cropped; cp -r *.mp4 ../
fi

答え1

#!/bin/bash
set -e
if [ "$1" == "cropit" ]; then
   ITS_CROP_TIME="$(
        mkdir cropped;
        for i in *.mp4; do 
           ffmpeg -i "$i" -filter:v "crop=1920:980:0:-100" cropped/"${i%.*}.mp4"
        done
        rm -r ./*.mp4
        cd cropped
        cp -r ./*.mp4 ../
    )"
fi

https://www.shellcheck.net/

答え2

ITS_CROP_TIME後で実行するコマンドバーに変数を設定したいとしますか?

この機能の目的は次のとおりです。

crop_all_in_dir () {
    local source_dir="$1"
    local dest_dir="$2"

    mkdir -p "$dest_dir"

    for file in "$source_dir"/*.mp4; do
        [ ! -f "$file" ] && continue
        ffmpeg -i "$file" -filter:v "crop=1920:980:0:-100" "$dest_dir/(basename "${file%.*}").mp4"
    done
}

その後、後でスクリプトから呼び出すことができます。

# optional cropping
if [ "$1" = "cropit" ]; then
    crop_all_in_dir . cropped
fi

つまり、*.mp4現在のディレクトリ内のすべてのファイルを切り取り、切り捨てられたファイルをそのディレクトリcropped(現在のディレクトリのサブディレクトリ)に配置するか、出力ディレクトリがまだない場合に作成します。

この関数は非破壊的な方法で切り捨てを実行するため、cp元のファイル(ユーザーファイルなど)の置き換えは関数の外部で行われます。

関連情報