Вы должны использовать меню, а не окно сообщений. Попробуйте этот сценарий:
#!/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/050 .
Скрипт перечисляет все, что находится в папке / home, как и в вашем примере. Если вам действительно нужны только файлы, замените
ls -1 /home
на
find /home -maxdepth 1 -type f
. Также подумайте об использовании 'whiptail', потому что он используется по умолчанию в большинстве дистрибутивов. Диалог в основном не устанавливается.
dialog имеет виджеты выбора файлов и выбора директории (как Xdialog):
Для его использования можно использовать скрипт OP
#!/bin/bash
dialog --title "List file of directory" --fselect /home 100 100
хотя окно 100x100 кажется довольно большим.
Если вы хотите ограничиться скриптами, которые могут быть запущены с помощью whiptail
, опция --radiolist
является альтернативой --menu
.