【问题标题】:run bash script without input在没有输入的情况下运行 bash 脚本
【发布时间】:2012-07-06 15:00:31
【问题描述】:

我已经编写了一个 bash 脚本来安装多个包,但是对于每个连续的包安装,我都会收到以下消息:

After this operation, 1,006 kB of additional disk space will be used.  
Do you want to continue [Y/n]? 

有没有办法将默认值设置为 Y,这样就不需要用户输入?我的脚本预计将在夜间运行而无需任何干预

提前致谢

【问题讨论】:

  • IIRC 很久以前有一个“y”命令吗? (一个在标准输出上发出 Y 的简单命令,但这是很久以前的事了)
  • 除了 Misch 的回答之外,您应该在一次调用 apt 时安装所有软件包,以提高效率。例如,而不是for package in "${packages[@]}"; do apt-get install "$package" -y; done;改为这样做:apt-get install "${packages[@]}" -y
  • 感谢大家的回复,当我在我的 bash 脚本之外运行以下命令时,您的解决方案工作正常 - 但是在脚本中它仍然提示我 - 这是我正在尝试的包之一无需用户干预即可安装。 sudo apt-get install -y flex

标签: bash shell unix


【解决方案1】:

想到了两种方法。第一个(也是更好的选择)是使用包管理器中的选项。例如:

apt-get install -y [YOUR_PACKAGE]

如果您使用apt(在此处输入apt-get install --help 以获得更多帮助)。

第二个更像是一个快速'n-dirty...在yes之后使用管道:

yes | apt-get install [YOUR_PACKAGE]

这总是给我带来微笑:p

后一个选项也对所有其他问题回答“是”,这可能很方便(错误等)但可能有风险(这就是这些问题首先存在的原因!)

【讨论】:

  • 感谢大家的回复,当我在我的 bash 脚本之外运行以下命令时,您的解决方案工作正常 - 但是在脚本中它仍然提示我 - 这是我正在尝试的包之一无需用户干预即可安装。 sudo apt-get install -y flex
  • 奇怪......这对我来说非常好用。您能否发布(sn-p)有问题的脚本?
【解决方案2】:

我认为该消息看起来像您正在使用 apt-get。

在这种情况下,您可以使用标志 --assume-yes 或更短的标志:-y,它应该会自动回答该问题,而不提示用户

【讨论】:

  • 虽然这适用于 apt 的问题,但仍会出现高优先级交互式 debconf 提示。
  • 还有--force-yes。我不知道如果你使用它是否会没有任何问题,但手册上说'不应该使用它,除非在非常特殊的情况下。使用 force-yes 可能会破坏您的系统!'
  • 不适用于 debconf,其问题可能不是“是或否”。考虑 MySQL,其中 debconf 提示为 MySQL 设置 root 密码。
  • 感谢大家的回复,当我在我的 bash 脚本之外运行以下命令时,您的解决方案工作正常 - 但是在脚本中它仍然提示我 - 这是我正在尝试的包之一无需用户干预即可安装。 sudo apt-get install -y flex
  • @godzilla 这对我有用。我只是将您的命令(使用不同的包,因为我安装了 flex)放在 shell 脚本中并执行它。系统不会提示我接受依赖项。你的脚本看起来怎么样?
猜你喜欢
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多