【问题标题】:Handling input confirmations in Linux shell scripting在 Linux shell 脚本中处理输入确认
【发布时间】:2011-11-16 16:02:20
【问题描述】:

我正在编写一个 Linux Shell 脚本来自动化我在 Ubuntu 11.04 上所做的一些事情。

基本上,我正在编写一个 shell 脚本来安装 NGINX、MySQL 和 PHP,然后配置所有内容。我知道如何通过命令行完成所有操作。

但是,我不知道如何处理流程要求用户输入的部分。例如,我使用 apt-get 安装的某些东西会要求您确认,即 (Y)es 或 (N)o。

我将如何处理 shell 脚本中的自动确认,即在被询问时自动确认是或否?

【问题讨论】:

  • 重复? stackoverflow.com/questions/226703/…(希望对您有所帮助!)
  • @heltonbiker:我不是试图从 shell 脚本的用户那里获取输入,而是在我的脚本通常会提示我提供是或否的任何地方强制/进行输入回应。
  • 你是对的,我看错了,对不起。

标签: linux shell ubuntu apt debconf


【解决方案1】:

yes | ./script 将回答 y 的所有问题。

否则,编写一个打印您想要的答案的脚本,例如:

 echo N
 echo Y
 echo Y

【讨论】:

  • 感谢您的选择。我不确定我将如何构建脚本来做到这一点,你有代码示例吗?
  • 如果您不想总是回答“是”,我真的不明白您的问题,因为它完全取决于具体情况。如果您想对脚本回答“是 是 否”,只需:printf "y\ny\nn\n" | ./your_script 或编写一个带有单独行的简单脚本来打印每个答案,然后:./answer_script | ./the_script
  • 非常感谢。我想我现在有多种选择,以防我想对不同的提示做出不同的回答。这似乎是做我想做的最优雅的方式,因为我只需要用脚本调用它一次。
  • 如果提示要求您输入非字符按键,例如“按 Enter 继续”?
【解决方案2】:

通常,您可以调用此类交互式程序,并选择自动对所有问题回答“是”。例如,您可以使用-y 调用apt-get。从手册页:

-y, --yes, --assume-yes 对提示自动是;假设“是”作为所有提示的答案并运行 非交互式的。

【讨论】:

  • 谢谢。这正是我想要的。
【解决方案3】:

对于 Apt,正确的答案是使用正确的参数“预置”您的 debconf 数据库。如果 Debconf 从其数据库中找到答案,它不会询问。另见http://www.debian-administration.org/articles/394

【讨论】:

【解决方案4】:

试试Expect,它可能就是您想要的。

【讨论】:

  • 非常感谢,它看起来很有趣。我是否必须确切知道提示将是什么,即如果我在我的 shell 脚本中运行的命令会执行诸如“输入您的出生日期:”之类的操作,我是否必须写期望“输入您的出生日期:" 完全符合提示的要求?!
猜你喜欢
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 2011-04-14
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多