結果を見つけるために読み取りループを使用するときのユーザー入力の読み取り

結果を見つけるために読み取りループを使用するときのユーザー入力の読み取り

bashスクリプトで、次の文を使用してfind結果を繰り返します。

find ./ -type f \( -iname \*.mkv -o -iname \*.mp4 \) | while read line; do

これで問題は、このループで「読み取り」を使用してユーザー入力を要求できないことです。なぜなら、結果の次の行が提供されるからです。

read mainmenuinput

ユーザー入力を待つのではなく、次のファイル名を知らせます。

この問題をどのように解決できますか?

レイファンありがとう

ベストアンサー1

findプロセス置換からループへのリダイレクトを使用している場合は、結果に別のファイル記述子を使用できます。

# this reads from fd 3
while IFS= read -r line <&3; do
    # this reads from fd 0 (stdin)
    read -p "Enter your input" main_menu_input
    # .. do stuff
done 3< <(
    find ... 
)

find コマンドが一番下に表示されるため、読みやすさが少し低下しますが、ファイル記述子を使用すると最大限の柔軟性が得られます。また、whileループはいいえパイプのためにサブシェルで実行されるので、ループの後ろのコードに依存するwhileループに変数を設定すると、これで問題ありません。

おすすめ記事