如何在命令导致提示时自动输入字符串?

时间:2016-01-20 17:58:50

标签: linux git bash shell

我想使用脚本从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)? 

我开发了以下脚本,以便脚本自动输入“是”:

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

git_clone

但它不起作用。该脚本始终会生成提示(yes/no)

我错过了什么?

1 个答案:

答案 0 :(得分:1)

该消息(和交互)来自ssh命令,而不是git本身。 (这是间接有用的,因为它意味着如果您的目标只是为了避免交互,您知道要定位哪个命令:您只需要告诉ssh您实际上并不关心对其他主机进行身份验证,或者使用诸如{之类的协议{1}}代替git://...。)

如果你真的想亲自处理这种交互,你需要打开一个pty(可能是期望的,如Wolf noted in a comment)。原因是ssh打开ssh://...以强制与用户交互,而不是从任何管道或文件重定向读取。因此,您必须为其提供一个由您自己的程序控制的控制终端。