【问题标题】:gitlab automated pushing scriptgitlab 自动推送脚本
【发布时间】:2015-03-08 15:09:47
【问题描述】:

我正在尝试编写一个脚本,它会在我更改文件后立即自动推送到我的服务器。

我目前的结果是这样的:

#! /bin/bash
DIRECTORY_TO_OBSERVE="/home/test"
function block_for_change {
  inotifywait -r \
    -e 'modify,move,create,delete' --exclude '(/4913|.swx|.swp)$' \
    $DIRECTORY_TO_OBSERVE
}

while block_for_change; do
git add --all
git rm $(git ls-files --deleted)
git commit -m 'Update -  $(date)'
git push -u origin master
expect "Username:"
send "TestUsernme\r\n"
expect "Password:"
send "TestPassword\r\n"
done

但是,expect 没有正常工作。一个示例日志是这样的: 手表成立。

/home/test/ MOVED_FROM test.sh
[master 8a749f5] Update -  $(date)
 1 file changed, 1 insertion(+)
Username for 'http://git.':

我的脚本有什么问题?为什么没有检测到用户名和密码是预期的?

【问题讨论】:

    标签: bash automation push expect


    【解决方案1】:

    如果您打算在 bash 脚本中使用 expect 代码,那么最好将代码保留在 expect -c 标志内。

    git add --all
    git rm $(git ls-files --deleted)
    git commit -m 'Update -  $(date)'
    git push -u origin master
    # Keeping the 'expect' code with '-c' flag
    expect -c "
    exp_internal 1; #Remove this line once your prob solved
    expect \"Username:\"
    send \"TestUsernme\r\n\"
    expect \"Password:\"
    send \"TestPassword\r\n\"
    "
    

    请注意,我已经用反斜杠转义了双引号。看看here,了解使用带有expect -c标志的双引号和单引号的意义

    【讨论】:

    • 是否要求expect属性与行100%匹配?第一个输入实际上是Username for 'http://git.mydomain.net':
    • 是的。因此,最好将其单独更改为“用户名”。您可以根据需要应用正则表达式或 glob 模式。
    • 很好改了,但还是不行:Watches established. /home/test/ CREATE test.h [master 886d790] Update - $(date) 2 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 test.h Username for 'http://git.mydomain.net': 行在那里但是没有写用户名...
    • 然后改成expect -re \"Username.*?:\"看看。如果仍然出现问题,请添加调试并发布您的观察结果。更新了我的帖子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多