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

时间:2015-06-08 14:38:21

标签: linux bash

[EDITED] 它可以被视为[这个问题] [1]的扩展。 SSH-keyGen 上面的命令可用于为命令的第一个输入请求提供一个“ENTER”字符。

如何在第二个输入请求中为同一个命令提供下一个“ENTER”字符。

如果需要任何其他详细信息,请发表评论。

给出了我想要实现的具体示例。 我需要在我的shell脚本中运行echo -ne "\n \n"| ssh-keygen //which is passing two new lines for the first input request only. commmand。 它会要求以下输入:

  1. 输入目标文件名
  2. 输入密码短语
  3. 再次输入密码短语
  4. 我们如何将这三个输入传递给命令?

    我试过了,

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

    和 {{1}}

    注意:在上面两个命令中避免输入文件名请求,只是为了简单起见

4 个答案:

答案 0 :(得分:15)

例如,您可以使用

echo -e "\n"

echo -en "\n\n"

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

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

修改

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

echo | ssh-keygen -P ''

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

答案 1 :(得分:3)

一般解决方案是使用the yes command

yes '' | command

yes将重复输出命令行中指定的字符串,并附加换行符。如果以空字符串作为参数运行它,它将输出无限串的换行符。

答案 2 :(得分:2)

带有2个空行的heredoc怎么样:

command <<END


END

或使用printf

printf "\n\n" | command

答案 3 :(得分:0)

你应该看看期待:

#!/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";