簡體   English   中英

如何在bash腳本中為命令模擬兩次連續的ENTER鍵按下?

[英]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 它將要求以下輸入:

  1. 輸入目標文件名
  2. 輸入密碼
  3. 再次輸入密碼

我們如何將這三個輸入傳遞給命令?

我試過,

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 ''

(注意兩個'中間沒有空格:它們很重要)

一般的解決方案是使用yes命令

yes '' | command

yes將重復輸出命令行中指定的字符串,並附加換行符。 如果以空字符串作為參數運行它,它將輸出無限的換行符串。

一個有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM