私はリストから1つのオプションを選択する必要があるbashスクリプトを書いています。オプションのリストは実際には、ディレクトリ内のファイルのベース名(パスと拡張子なし)と、シンボリックリンクを除外する必要があるという追加の要件のリストです。bashでselect構造体のリストを処理する
私はもともとのサブディレクトリを選択するためのものですthis other questionに投稿された1つのライナー愛して:私は、ファイルのbasename
を取得するには、そのファイルがシンボリックリンクではない場合はどのように確認する方法を知っている
printf "Please select folder:\n"
select d in */; do test -n "$d" && break; echo ">>> Invalid Selection"; done
cd "$d" && pwd
をそれはファイルごとです。ただし、select
構成はファイルのリストを管理します。どういうふうにbasename
コマンドとチェックを接続して、select
構成要素のすべての要素にチェックを入れて、select
に到着する前にリストをフィルタリングして処理することができますか?
はい、可能な限り下位互換性があり、Bash 4.xに依存したくないと思います。実際、ソリューションがBourneシェルと互換性があっても、私はそれを好むでしょう。 – cesss
@cesss、aside:Bourne( '^'をパイプ文字として使用できる1970年代のシェル)、あるいはPOSIX sh(90年代初期のbash、ksh 、ダッシュなどはスーパーセットの実装です)? –
@cesss:ソリューションBash 3.xと互換性があります。あなたが本当に移植可能なソリューションを望むなら、あなたの質問に 'bash'というタグを付けないでください。 'select'コマンドはPOSIXシェル仕様の一部ではなく、どちらも配列変数ではないことに注意してください。 – mklement0