bash脚本,提示用户选择ID或名称完成

时间:2013-08-30 09:01:13

标签: bash select autocomplete tab-completion

我正在编写一个脚本,该脚本读取路径中的目录并提示用户选择该目录。到目前为止,该脚本如下所示:

select choises in ${list_files[@]}; do
  if CONTAINS_ELEMENT $choises "${list_files[@]}"; then
    break
  else
    echo "invalid choise (PS use the ID numbers)! Try again:"
  fi
done

“CONTAINS_ELEMENT”thingy是一个检查变量$ choises是否是list_files数组成员的函数。这个脚本工作正常,输出是这样的:

1) first_folder 
2) second_folder
3) yet_another_folder

用户可以通过输入相应的ID值(即“2”代表“second_folder”)来选择女巫文件夹。

我正在努力解决的问题是:有没有办法检查提供的答案是否是正确的数字 - 或者正确的文件名?如果你可以手动写入文件名,有没有办法在这个脚本中实现名称完成?

select的实际回复保存在变量$ REPLY中,我需要以某种方式检查$ choises和$ REPLY。我怀疑完成机制要复杂得多..

有没有人在这里有好的建议?如果你能帮助我掌握这些功能,那将是非常酷的!

1 个答案:

答案 0 :(得分:0)

select choises in ${list_files[@]}; do
  if CONTAINS_ELEMENT $choises "${list_files[@]}" || CONTAINS_ELEMENT $REPLY "${list_files[@]}"; then 
    break
  else
  echo "invalid choise (PS use the ID numbers)! Try again:"
  fi
done

这使得ID号和完整目录名都有效,但代码有点难看,并且没有名称完成。