変数のlsコマンドはダイアログのリストを表示し、選択したオプションを処理します。

変数のlsコマンドはダイアログのリストを表示し、選択したオプションを処理します。

私はシェルプログラミングを始めましたが、次の問題を解決できませんでした。

定義されたディレクトリ(たとえば/ var)内のすべてのディレクトリがダイアログボックスのリストに表示されます。また、以前に定義した変数を選択したフォルダに保存したい(すべてのフォルダで同じ)。

誰もが問題に対する解決策を持っていますか?

編集する//

解決策

#!/bin/bash
DIR="/var"
function cho () {
options=$(ls "$DIR" | awk '{print $1, FNR, "off"}')
cmd=(dialog --title Menu --stdout \
      --separate-output \
      --checklist "Select options:" 22 76 16)
choices=$("${cmd[@]}" ${options})
check
}
function check () {
if [ $? -eq 0 ]; then
   if [ -z "$choices" ]; then
      dialog --title Menu --msgbox "No option selected!" 5 28
      dialog --clear
      cho
else
   for choice in $choices
   do
   echo "$choice"
   done
fi
else
  clear && echo ""Cancel...
fi
}
cho

答え1

#!/bin/sh

dir='/'

select name in $( find "$dir" -type d ! -name "$dir" -maxdepth 1 ); do
    if [ -z "$name" ]; then
        echo 'error' >&2
    else
        break
    fi
done

printf 'User picked "%s"\n' "$name"

$dirこれは、次のディレクトリを一覧表示し、ユーザーにディレクトリの1つを選択できるメニューを提供する簡単なシェルスクリプトです。

選択した項目はに保存されます$name

テストしてみてください:

$ sh script.sh
 1) /altroot                             7) /root
 2) /bin                                 8) /sbin
 3) /dev                                 9) /tmp
 4) /etc                                10) /usr
 5) /home                               11) /var
 6) /mnt                                12) /tmp_mnt
#? q
error
#? 0
error
#? 9
User picked "/tmp"

見つかったディレクトリ名に異常な文字(改行文字など)が含まれていると、このスクリプトは失敗する可能性があります。

関連情報