提示用户从目录列表中进行选择

时间:2014-08-25 22:47:57

标签: bash

我正在编写一个脚本,将数据集从服务器下载到本地主机上。我想提示用户从服务器上可用的数据集中选择数据集。到目前为止,我已经尝试了以下命令

select DATASET in $(ssh -i ssh_key user@server "ls -1 /path/to/datasets/"); do break; done
1) dataset01
2) test1
3) test2
#?

这将生成我想要的可用数据集列表,并在用户选择显示的值时将数据集文件名放入DATASET目录。

但是,这不会对所选条目进行任何验证。如果用户输入的值不在列表中,我写的select语句很乐意接受它并继续前进。

如何调整此命令以检查所选值是否在所显示的选项范围内?

2 个答案:

答案 0 :(得分:1)

只有在数据集不为空时才能中断,例如

PS3="Enter number or 0 for exit> "    #better prompt for the select
values=($(seq -f "set%g" 20))  #simulating 20 datasets 
select dataset in "${values[@]}"
do
    [[ "$dataset" ]] && break  #existing dataset selected, break
    (( "${REPLY}" == 0 )) && exit #0 - exit the script
done
echo =$dataset=

答案 1 :(得分:0)

select打包成

DATASET=
while [[ ! $DATASET ]] ; do
    select DATASET in ...
done

man bash说:

  

如果该行包含该数字     对应于所显示的单词之一,然后设置NAME     那个词。