2016-01-20 60 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以强制与用户交互,而不是从任何管道或文件重定向读取。因此,您必须提供一个由您自己的程序控制的控制终端。

相关问题