このスクリプトで「ls」の出力を確実にキャプチャするにはどうすればよいですか?

このスクリプトで「ls」の出力を確実にキャプチャするにはどうすればよいですか?

次のスクリプトは、play_movie.sh自動的に映画(現在のディレクトリに映画が1つしかない場合)を選択して使用するように設計されていますffplay。それ以外の場合は、ユーザーに一連の映画を表示し、ユーザーの入力(再生する映画)を受け入れるように設計されています。

#!/usr/bin/bash

output_a=$(ls -R *.[aA][vV][iI] 2>/dev/null)
output_m=$(ls -R *.[mM][kKpP][vV4]] 2>/dev/null)
output_v=$(ls -R *.[vV][oO][bB]] 2>/dev/null)
all_exts="${output_a}${output_m}${output_v}"
ln_cnt=$(echo "${all_exts}" | wc -l)

if [[ "$ln_cnt" -eq 1 ]]; then
  echo -e "Playing: ${all_exts}\n"
  ffplay -hide_banner -infbuf -fs -sn -ast a:0 "${all_exts}"
elif [[ "$ln_cnt" -gt 1 ]]; then
  printf "Select a file out of the list below"
  ls -R *.[aA][vV][iI] 2>/dev/null 
  ls -R *.[mM][kKpP][vV4] 2>/dev/null 
  ls -R *.[vV][oO][bB] 2>/dev/null
  read line; ffplay -hide_banner -infbuf -fs -sn -ast a:0 "$line"
fi

このスクリプトに関する私の質問は次のとおりです。

  1. if現在、ディレクトリに多くの映画がある場合でも、スクリプトは問い合わせの最初の四半期を実行します。それから私は理解しましたNo such file or directory
  2. 上映する映画がひとつだけなら私はNo such file or directory

ls過去の結果に頼るのが難しいです。このスクリプトを使用せずに変更できますかfind

ベストアンサー1

「現在のディレクトリに1つしかない」部分が正しいとします(つまり現在ディレクトリにあるファイルにのみ興味があります。ls以下はもちろんを使用する必要はありませんfind

#!/usr/bin/bash -

shopt -s nullglob
set -- *.[aA][vV][iI] *.[mM][kKpP][vV4] *.[vV][oO][bB]

if [[ "$#" -eq 1 ]]; then
  printf>&2 "Playing: %s\n\n" "$@"
  ffplay -hide_banner -infbuf -fs -sn -ast a:0 -- "$@"
elif [[ "$#" -gt 1 ]]; then
  printf>&2 "Select a file out of the list below:\n"
  printf>&2 "%s\n" "$@"
  IFS= read -r line &&
    ffplay -hide_banner -infbuf -fs -sn -ast a:0 -- "$line"
fi

この設定は、nullglob一致しないglobを削除し、パラメータを一致するすべてのファイルに設定します。

図からわかるようにStefan Chazerasの答えselect、ユーザーエクスペリエンスを向上させるために使用できます(select位置パラメータはデフォルトで使用され、上記の使用方法とよく合いますset)。

#!/usr/bin/bash -

shopt -s nullglob
set -- *.[aA][vV][iI] *.[mM][kKpP][vV4] *.[vV][oO][bB]

if [[ "$#" -eq 1 ]]; then
  printf>&2 "Playing: %s\n\n" "$@"
  ffplay -hide_banner -infbuf -fs -sn -ast a:0 -- "$@"
elif [[ "$#" -gt 1 ]]; then
  select video; do
    ffplay -hide_banner -infbuf -fs -sn -ast a:0 -- "$video"
    exit
  done
fi

おすすめ記事