当被问到时,如何在 bash 脚本中自动按 Enter?

How to automatically hit Enter in bash script when asked?

提问人:Ooker 提问时间:3/14/2014 最后编辑:Ooker 更新时间:6/21/2022 访问量:36877

问:

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

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
bash 管道 回显 进入

评论

0赞 Charles Duffy 3/14/2014
不要尝试。执行此操作时,您可以获取 的退出状态或退出状态,具体取决于 shell 的当前配置方式。通过调用它根本不从 stdin 读取的方式,您可以获得更加一致和可靠的结果。echo | some_commandechosome_commandsome_command
0赞 twalberg 3/14/2014
你说的这个命令是什么?此外,几乎忽略了它的标准输入,因此将某些东西输送到其中并不能完成太多工作......enterreturn

答:

26赞 Thomas Orozco 3/14/2014 #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

评论

2赞 Charles Duffy 3/14/2014
管道可能工作也可能不工作 - 您知道 apt-get 和 apt-add-repository 从 stdin 读取而不是吗?最好更强烈地加强旗帜建议,这是一件更确定的事情。/dev/tty-y
0赞 Thomas Orozco 3/14/2014
@CharlesDuffy 添加了这些示例。然而,我怀疑 apt 在大多数情况下会使用,但肯定会破坏使用 .stdinDEBIAN_FRONTENDecho
4赞 tripleee 3/14/2014
虽然是问题描述的忠实副本,但惯用的写作方式只是.echo -ne '\n'echo
1赞 tripleee 3/14/2014
我会将解决方案作为主要答案发布,并将修复作为切线评论发布。-yecho
1赞 Tanjin Alam 6/21/2022 #2
'echo -ne "\n" | ./create.sh \n', // this command is for pressing enter each time the shell script is asking user to press enter
'echo -ne "\n" | yourcommand \n', //tempate 

  const client = new Client();
  const cmds = [
    'ls -lah \n', // \n is important 
    'cd /mnt \n',
    'echo -ne "\n" | ./create.sh \n', // this command is for pressing enter each time the shell script is asking user to press enter
    'pwd \n',
    'ls -lah \n',
    'exit \n',
  ];
  client.on('ready', () => {
      console.log('Client :: ready');
      client.shell((err, stream) => {
        stream.on('close', (code) => {
          console.log('stream :: close\n', { code });
        }).on('data', (myData) => {
          console.log('stream :: data\n', myData.toString());
        }).on('exit', (code) => {
          console.log('stream :: exit\n', { code });
          client.end();
        }).on('error', (e) => {
          console.log('stream :: error\n', { e });
          rej(e);
        });
        for (let i = 0; i < cmds.length; i += 1) {
          const cmd = cmds[i];
          stream.write(`${cmd}`);
        }
      });
    }).connect({
    host: '127.0.0.1',
    port: 22,
    username: 'root',
    password: 'root',
  });

参考资料 点击这里