/ /他の入力変数を無視して、複数の入力ファイルにbashスクリプトを実行する - bash、automator

他の入力変数を無視して、複数の入力ファイルに対してbashスクリプトを実行する - bash、automator

私は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は2

argsの順序を変更する:変数の値を取得する number 最初、 変数の値を取得する source_files、 そのため number 最初のパラメータになりますが、

次に:

echo number: $1
for f in "${@:2}"; do
echo file: $f
done