[英]How to simulate two consecutive ENTER key presses for a command in a bash script?
[已編輯] 它可以被視為對 [這個問題] [1] 的擴展。 echo | command
echo | command
上述命令可用於向命令的第一個輸入請求提供一個“ENTER”字符。
我如何在第二個輸入請求中為同一命令提供下一個“ENTER”字符。
如果需要任何其他詳細信息,請發表評論。
我給出了我想要實現的具體例子。 我需要在我的 shell 腳本中運行SSH-keyGen
。 它將要求以下輸入:
我們如何將這三個輸入傳遞給命令?
我試過,
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
注意:我避免了上面兩個命令中的輸入文件名請求,只是為了使事情簡單
例如,您可以使用其中之一
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
你應該看看期望:
#!/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";
像echo -e "\\n\\n"
這樣的解決方案將僅通過 echo empty line 模擬ENTER
,而沒有 shell prompt
。
但是如果你想用 shell prompt
模擬ENTER
,這是我的解決方案(定義一個名為entern
的函數):
zsh:
entern () {
repeat $1 {echo "${(%%)PS1}"}
}
重擊 4.4+:
entern () {
repeat $1 {echo "${PS1@P}"}
}
謝謝: https : //stackoverflow.com/a/56267057/2752670
用:
➜ ~ entern 5
等着瞧:
➜ ~ entern 5
➜ ~
➜ ~
➜ ~
➜ ~
➜ ~
➜ ~
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.