如何在bash脚本中模拟两个连续的ENTER键的命令?

[编辑]它可以被认为是对[这个问题] [1]的扩展。 echo | command echo | command以上命令可用于向命令的第一个input请求提供一个“ENTER”字符。

如何在第二个input请求中提供下一个“回车”字符到同一命令。

如果需要其他细节,请发表评论。

我给出了具体的例子,我想实现。 我需要在shell脚本中运行SSH-keyGen 。 它会要求以下input:

  1. input目标文件名称
  2. input密码短语
  3. 再次input密码短语

我们如何将这三个input传递给命令?

我试过了,

 echo -ne "\n \n"| ssh-keygen //which is passing two new lines for the first input request only. 

echo -ne "\n"|(echo -ne "\n"|ssh-keygen)// but still no positive result

注意:为避免上述两个命令中的input文件名请求,只是为了简单起见

例如,你也可以使用

 echo -e "\n" 

要么

 echo -en "\n\n" 

-e选项告诉echo来解释转义字符。 \n是换行符(输入)字符。 所以第一个打印换行是因为\n ,然后是另外一个,因为echo通常附加一个换行符。

-n选项告诉echo禁止添加隐式换行符。 为了得到两个换行符,你需要指定两个\n

编辑:

这里的问题是, ssh-keygen是特殊的。 由于安全考虑,密码不是从标准输入读取,而是直接从终端读取! 要提供密码(即使是空密码),您也需要使用-P选项。 既然你只需要一个ENTER(对于文件路径提示),这个命令应该可以工作:

 echo | ssh-keygen -P '' 

(注意两者之间没有空间:它们很重要!)

如何与2空行heredoc:

 command <<END END 

或者使用printf

 printf "\n\n" | command 

一般的解决方法是使用yes命令 :

 yes '' | command 

yes会重复输出在命令行中指定的字符串,并附加一个换行符。 如果你用一个空字符串作为参数运行它,它会输出一个无穷无尽的换行符串。

你应该看看期待:

 #!/usr/bin/expect #set timeout 10 set clientName [lindex $argv 0]; set hostName [lindex $argv 1]; set passWord [lindex $argv 2]; spawn ssh "$hostName"; expect "Password:"; send "$passWord\r"; expect "$hostName";