【问题标题】:How to list a directory with numbers so the user can select one in bash?如何列出带有数字的目录,以便用户可以在 bash 中选择一个?
【发布时间】:2012-05-12 23:26:51
【问题描述】:

好的,所以我基本上是想让用户决定他们想使用哪个驱动器来安装软件。我想发布一个类似于“您想安装到哪个驱动器?”的问题。然后列出编号的驱动器,以便用户可以轻松选择其中一个驱动器。有没有办法给 ls 结果编号,然后让用户选择一个。我正在考虑使用 case 命令或者可能是 echo 和 read,但我无法让它正常工作。另外我应该在mac上的bash中添加它。太感谢了。

【问题讨论】:

  • 通常,您会要求用户通过命令行指定。

标签: macos bash ls


【解决方案1】:

使用select:

PS3='which drive would you like to install to? '
select dir in */ quit
do
    if [[ $dir == quit ]]
    then
        break
    fi
    echo "$dir"    # or do other stuff
done

如果适合您的需要,您可以在 select 块内使用 case 语句。

另外,请参阅 dialogwhiptail。不幸的是,OS X 似乎都没有。

【讨论】:

  • 好的,所以在实现中它似乎就是在创建一个循环。每次执行我的代码的下一部分时,它都会返回到“您想安装到哪个驱动器?”的问题。这是来自“ps3 =”还是可能导致这种情况的原因,只要我使用 select 命令,我需要使用 ps3 还是可以使用简单的 echo?哦,也非常感谢!
  • @BrandonOney: PS3 只是设置select 语句的提示。这是循环的select 语句。 break 语句退出循环 - 它可以是 ifcase 的一部分。如您所见,我将目录作为选项的一部分进行选择,但我添加了“退出”并对其进行测试作为另一个选项。 EOF 也会退出(例如,用户按下 Ctrl-D)。
【解决方案2】:

试试这个:

ls | cat -n; read a; ls | head -n $a | tail -n 1

【讨论】:

  • 这似乎有效,但我不肯定它是如何工作的,输出变量是什么?谢谢
  • ls | cat -n; read a; d=`ls | head -n $a | tail -n 1`; cd $d
猜你喜欢
  • 1970-01-01
  • 2020-09-18
  • 1970-01-01
  • 2022-11-10
  • 2010-09-17
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
相关资源
最近更新 更多