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ループに変数を設定すると、これで問題ありません。