web-dev-qa-db-ja.com

ファイルを表示してそのうちの1つを選択するためのダイアログメニュー

メニューの/homeディレクトリにあるすべてのファイルを表示し、そのうちの1つだけを選択したい。次に、スクリプトは選択したファイルのフルパスを出力します。

次のスクリプトを作成しました。このスクリプトは、ダイアログボックスメニューにファイルのみを表示します。

#!/bin/bash
dialog --title "List file of directory /home" --msgbox "$(ls /home )" 100 100
1
maihabunash

メッセージボックスではなくメニューを使用する必要があります。このスクリプトを試してください:

#!/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
clear
if [ $? -eq 0 ]; then # Exit with OK
    readlink -f $(ls -1 /home | sed -n "`echo "$FILE p" | sed 's/ //'`")
fi

ここでは配列が必要です。そうでない場合、コマンドとして正しく解析されません。 http://mywiki.wooledge.org/BashFAQ/05 を参照してください。

スクリプトは、例と同じように、/ homeフォルダー内のすべてをリストしています。本当にファイルだけが必要な場合は、

ls -1 /home 

find /home -maxdepth 1 -type f

ほとんどのディストリビューションではデフォルトであるため、「ホイップテール」の使用も検討してください。ダイアログはほとんどインストールされていません。

5
Citrisin

dialog には、ファイル選択ウィジェットとディレクトリ選択ウィジェット(Xdialogなど)があります。

picture of dialog with --fselect

それを使用するには、OPのスクリプトは次のようになります

#!/bin/bash
dialog --title "List file of directory" --fselect /home 100 100

100x100のウィンドウはかなり大きいように見えますが。

whiptailで実行できるスクリプトに制限したい場合は、--radiolistオプションが--menuの代わりになります。

3
Thomas Dickey