[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。
它会要求以下输入:
我们如何将这三个输入传递给命令?
我试过了,
echo -ne "\n"|(echo -ne "\n"|ssh-keygen)// but still no positive result
和 {{1}}
注意:在上面两个命令中避免输入文件名请求,只是为了简单起见
答案 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)
答案 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";