如何在bash脚本中打印Expect发送语句并进行比较

时间:2019-07-18 14:04:10

标签: bash expect

我正在使用bash脚本在git中克隆我的所有存储库。我所有的存储库都在一个文件中。它一一调用我的期望脚本来读取存储库,该脚本生成git clone。我使用的是Expect,因为它在每次克隆时都会要求我输入密码,因此Expect可以为其提供密码。 当我的密码正确时,它可以正常工作。但是,如果密码错误,我想转到我的bash脚本并执行某些操作,然后终止bash脚本。

Bash脚本调用需要这样的脚本

expect ~/expect_script.exp

我的期望脚本

#!/usr/bin/expect -f
puts "## Starting the expect script... ##" 
spawn git clone ssh://$GIT_CENTRAL_PATH/web/$sub_dir_type/$repository
expect "*?assword: "
send $PASS\r
expect {

    -re “remote: Counting objects:*?” {send “echo running\r”}
    -re “Permission denied*?” {send “password denied”}
}

如果密码正确,我想git启动对对象进行计数并克隆存储库。如果密码错误,我希望bash脚本执行某些操作并停止。您能帮我解决这个问题吗?如果您不了解我想要实现的目标,请告诉我。

1 个答案:

答案 0 :(得分:0)

我将使用“成功/失败”退出状态来表示预期结果。

expect {
    "Permission denied*?” {exit 1}
    "remote: Counting objects:*?"
}
set timeout -1
expect eof
exit 0

然后,shell脚本如下所示:

if expect ~/expect_script.ext; then
    echo "repo cloned"
else
    echo "password denied"
fi

一些注意事项:

  1. 您的期望模式是全局模式,而不是正则表达式
  2. 您的期望脚本中有“弯曲”引号。小心您的编辑器以使用普通引号。