bash:从动态文件和输出选择到变量

时间:2017-08-25 00:39:43

标签: linux bash dialog ncurses

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

我想对此部分使用对话框radiolist ,以便他们只能从可用图像列表中选择单个图像文件。我动态创建图像列表并将其存储在名为 .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

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

为了使我的脚本能够工作,我需要将实际的文件名转换为一个变量,我稍后可以在我的脚本中使用它。

寻找一些想法......

1 个答案:

答案 0 :(得分:1)

radiolist小部件返回选定的标记(这是第一列)。

在这一行

IMAGELIST="$IMAGELIST $COUNT $i off"

您正在将标记字段设置为数字。如果您将其更改为

IMAGELIST="$IMAGELIST $i $i off"

然后标签将是一个文件名。

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