メニューのディレクトリの下にあるすべてのファイルを表示し、/home
そのうちの1つだけを選択したいと思います。これにより、スクリプトは選択したファイルのフルパスを印刷します。
次のスクリプトを作成しました。このスクリプトはダイアログメニューにのみファイルを表示します。
#!/bin/bash
dialog --title "List file of directory /home" --msgbox "$(ls /home )" 100 100
答え1
会話Xdialogなどのファイル選択およびディレクトリ選択ウィジェットがあります。
これを使用するには、OPのスクリプトは次のようになります。
#!/bin/bash
dialog --title "List file of directory" --fselect /home 100 100
100x100ウィンドウはかなり大きく見えますが。これマニュアルページより良い代替提供:
ほとんどのウィジェットは、複数行のメッセージプロンプト値に合わせてウィジェットのサイズを自動的に調整するために使用できる高さと幅のパラメータを受け入れます。
- パラメータが負の場合、ダイアログボックスは画面サイズを使用します。
- 引数が0の場合、ダイアログボックスはウィジェットの最小サイズを使用してプロンプトとデータを表示します。
- それ以外の場合、ダイアログはウィジェットの指定されたサイズを使用します。
実行できるスクリプトのみを制限したい場合は、whiptail
この--radiolist
オプションが最適です--menu
。
答え2
メッセージボックスの代わりにメニューを使用する必要があります。次のスクリプトを試してください。
#!/bin/bash
let i=0 # define counting variable
W=() # define working array
while read -r line; do # process file by file
let i=$i+1
W+=($i "$line")
done < <( ls -1 /home )
FILE=$(dialog --title "List file of directory /home" --menu "Chose one" 24 80 17 "${W[@]}" 3>&2 2>&1 1>&3) # show dialog and store output
RESULT=$?
clear
if [ $RESULT -eq 0 ]; then # Exit with OK
echo "${W[$((FILE * 2 -1))]}"
fi
これには配列が必要です。それ以外の場合、コマンドは正しく解析されません。http://mywiki.wooledge.org/BashFAQ/050。
スクリプトは、例と同じように、/homeフォルダのすべてを一覧表示します。本当にファイルが必要な場合は、交換してください。
ls -1 /home
そして
find /home -maxdepth 1 -type f
また、ほとんどのディストリビューションでデフォルトのオプション「whiptail」の使用を検討してください。ダイアログはほとんどインストールされていません。