私はMacのAutomatorを使ってbashを実行していますドロップレットにドロップされるファイルのスクリプト。入力はAutomatorアクションから収集され、引数としてbashスクリプトに渡されます。スクリプトは1つの入力ファイルで動作しますが、複数のファイルを扱う際に問題があります。
私の最終的な目標は、いくつかのドロップビデオファイルを受け入れ、番号を入力し、各ビデオファイルから(FFmpegを使用して)そのフレーム数を抽出することです。
私は特別な変数を使って入力をループすることができます $@
、 そのようです:
for f in "$@"; do
# perform an action
done
しかし、私のスクリプトはまた、このループに含める必要のないテキスト入力をユーザーに促します。
私は各入力ファイルに個別にアクセスするために、 $1
, $2
等 しかし、私は個々のファイルを個別に参照するのではなく、ループを使いたいと思っています。また、入力ファイルの量が予測できず、入力ファイルと入力テキストを区別する方法がわかりません。
テキスト入力を含まずにファイル入力だけをループする方法はありますか?
ここに私の現在のワークフローの説明があります:
特定の映画を入手する
one.mov
two.mov
変数の値を設定する (入力を受け入れる)
source_files
テキストを求める (入力を無視する)
番号を入力してください:
変数の値を設定する (入力を受け入れる)
数
変数の値を取得する (入力を無視する)
source_files
変数の値を取得する (入力を受け入れる)
数
シェルスクリプトを実行する (入力を受け入れ、 "引数として渡す")
#/bin/bash
for f in "$@"; do
echo $f
done
出力:
/folder/one.mov
/folder/two.mov
8
私は1つの変数を複数の入力に設定することを望んでいたので(それをループすることができました)、別の変数がその数値に設定されていましたが、それはうまく動作していないようです。
テキスト入力を参照せずに各入力ファイルをループする方法はありますか?
回答:
回答№1は2argsの順序を変更する:変数の値を取得する number
最初、 変数の値を取得する source_files
、 そのため number
最初のパラメータになりますが、
次に:
echo number: $1
for f in "${@:2}"; do
echo file: $f
done