【问题标题】:How to automatically hit Enter in bash script when asked?被问到时如何在 bash 脚本中自动按 Enter 键?
【发布时间】:2014-04-18 17:26:39
【问题描述】:

我知道这个问题被回答了很多次,但我仍然不知道该怎么做。也许是因为我不知道要搜索的正确关键字。

使用

echo -ne '\n' | enter

不起作用。我的代码是:

#! /bin/bash
#Grub-customizer
sudo add-apt-repository ppa:danielrichter2007/grub-customizer
echo -ne '\n' | return
sudo apt-get update
sudo apt-get install grub-customizer

【问题讨论】:

  • 不要尝试。当您执行echo | some_command 时,您可以获得echo 的退出状态或some_command 的退出状态,具体取决于您当前的shell 配置方式。只需调用 some_command 以使其根本不从标准输入读取,您将获得更多、更多更一致和可靠的结果。
  • 您所说的enter 命令是什么?此外,return 几乎忽略了它的标准输入,因此将某些内容输入其中并没有太大的作用......

标签: bash pipe echo enter


【解决方案1】:

您应该将\n 传送到将要接收它的命令中(否则它将永远看不到它!):

echo -ne '\n' | sudo add-apt-repository ppa:danielrichter2007/grub-customizer
echo -ne '\n' | sudo apt-get install grub-customizer

现在,正确的解决方案是改用 -y 标志:

sudo add-apt-repository -y ppa:danielrichter2007/grub-customizer
sudo apt-get install -y grub-customizer

【讨论】:

  • 管道可能工作也可能不工作——你知道 apt-get 和 apt-add-repository 从标准输入读取而不是/dev/tty吗?可能会更好地加强-y 标志建议,这是一个更确定的事情。
  • @CharlesDuffy 为这些添加了示例。然而,我怀疑 apt 在大多数情况下会使用stdin,但DEBIAN_FRONTEND 肯定会使用echo 破坏。
  • 虽然echo -ne '\n' 是问题描述的忠实副本,但惯用的写作方式只是echo
  • 我会将-y 解决方案作为主要答案,并将echo 修复作为切线评论。
猜你喜欢
  • 2020-09-23
  • 2012-06-26
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
  • 2017-02-13
  • 1970-01-01
相关资源
最近更新 更多