2016-01-20 59 views
0

我想使用腳本從git下載源代碼。如何在命令導致提示時自動輸入字符串?

以下git命令的結果提示:

git clone ssh://url.com/repo.git git_test3 
Cloning into 'git_test3'... 
The authenticity of host 'url.com (1.1.1.1)' can't be established. 
ECDSA key fingerprint is . 
Are you sure you want to continue connecting (yes/no)? 

我制定了以下腳本,以便通過腳本輸入「yes」自動:

#!/bin/sh 
git_clone() { 
    git clone ssh://url.com/repo.git test <<EOF > /dev/null 
yes 
EOF 
} 

git_clone 

,但它不工作。該腳本始終導致提示(yes/no)

我錯過了什麼?

+0

你可以用'expect'腳本來做你想做的事情。請參閱http://expect.sourceforge.net/ – Wolf

+0

嘗試** yes **命令,它可能工作。試試這個,是的,是的git clone ssh://url.com/repo.git test',請參閱http://stackoverflow.com/questions/8416887/is-the-program-yes-used-for-anything-significant – ishaan

+1

@ishaan這只是另一個向'git'的標準輸入提供重複文本的方式,這是OP已經在做的事情。問題在於它不是'git'請求響應,它是'ssh','ssh'不是從標準輸入讀取,而是直接從終端讀取。 – chepner

回答

1

該消息(和交互)來自ssh命令,而不是git本身。 (這是間接有用的,因爲它意味着如果您的目標只是爲了避免交互,您就知道要執行哪個命令:您只需告訴ssh,您實際上不關心驗證其他主機,或使用協議,如git://...而不是ssh://...。)

如果您確實想自己處理交互,您需要打開一個pty(或許可以通過預期的方式,如Wolf noted in a comment)。原因是ssh打開/dev/tty以強制與用戶交互,而不是從任何管道或文件重定向讀取。因此,您必須提供一個由您自己的程序控制的控制終端。

相關問題