linux - bash:从动态文件创建一个 ncurses 对话框单选列表并将选择输出到变量

标签 linux bash dialog ncurses

我正在为 Clonezilla 构建一个 ncurses/dialog 驱动的交互式 shell 脚本,以简化图像的创建和恢复,这些图像通过我们每次使用的非常具体的设置传递。部分脚本要求用户选择要恢复的图像,但我碰壁了。

我想为这部分使用对话框单选列表,这样他们只能从可用图像列表中选择一个图像文件。我即时创建图像列表并将其存储在名为 .clone_images_list

的文件中

我几乎一直都在那里,除了当用户选择文件名时,我的一切都正常工作,它输出行号而不是文件名。我已经尝试了所有我能想到的但没有成功。

这是我目前所拥有的:
.

#! /bin/bash

COUNT=1
IMAGELIST=""
while read i; do
    IMAGELIST="$IMAGELIST $COUNT $i off"
   let COUNT=COUNT+1
done < .clone_images_list

dialog --backtitle "Available Image List" \
--radiolist "Select Image To Restore" 0 0 $COUNT \
$IMAGELIST 2> .tempfile

IMAGEFILE=`cat .tempfile`
echo $IMAGEFILE

这是我的 .clone_images_list 的样子:

channel1.170822104015.img
channel2.170822181523.img
channel3.170822180559.img
host.170822160320.img
host.170822174917.img

此列表可长可短,并会在创建新图像时随时更新。

为了让我的脚本正常工作,我需要将实际文件名放入一个变量中,以便稍后在我的脚本中使用。

寻找一些想法....

最佳答案

radiolist 小部件返回选定的标签(即第一列)。

在这一行

IMAGELIST="$IMAGELIST $COUNT $i off"

您正在将标签 字段设置为一个数字。如果你把它改成

IMAGELIST="$IMAGELIST $i $i off"

那么标签就是一个文件名。

如果这样做,--no-tags 选项会有所帮助,否则小部件会显示文件名两次。

关于linux - bash:从动态文件创建一个 ncurses 对话框单选列表并将选择输出到变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45872826/

相关文章:

linux - Bash - 我的脚本错误地重命名了一个文件夹

bash - 从 shell (bash) 脚本执行命令时在用户提示符中插入文本?

python - WxPython 框架未捕获 EVT_SET_FOCUS

jquery - 如何打开带有类而不是 id 的 jQuery 对话框?

android - 将自定义对话框 'header' 更改为 AlertDialog 'header'

windows - 类似于 Windows cmd "start"的 Linux/Ubuntu 命令?

regex - grep 中 '?' 的用法

regex - 使用 awk 将特定子字符串与正则表达式匹配

linux - Raspberry Pi/Raspbian 上的 Clang 错误?

linux - 通过 nohup 检查是否成功启动