首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >expect{send}语句后expect退出

expect{send}语句后expect退出
EN

Stack Overflow用户
提问于 2017-10-19 23:39:05
回答 1查看 184关注 0票数 0

当我运行这个我写来帮助安装AUR包的脚本时:

代码语言:javascript
复制
enter #!/bin/bash
#bash
function GO() {
    pack="$1"
    cower -ddf $pack
    cd "/home/$USER/applications/$pack"
    expect -c " set timeout -1
        eval spawn makepkg -Ascfi --noconfirm
        expect -nocase \"password for $USER:\" {send \"$pass\r\"}
        interact;"
    cd "../"

}
package="$1"
echo "I need your password for this, can I have it please?"
read -s pass
cd "/home/$USER/applications"

if [ "$package" == "update" ]
then
    file="/home/$USER/applications/update.pkgs"
    cower -u > file 
    while IFS= read -r line
    do
        package=$(echo $line | cut -d " " -f2)
        GO $package
    done <"$file"
else
    GO $package
fi

echo "have a good day."

exit 0

有时interact在输入密码后会停止,它只会回显“祝您一天愉快”。然后退出。我做错了什么吗?超时时间小于0,我在expect语句后进行了交互,我遗漏了什么吗?

EN

回答 1

Stack Overflow用户

发布于 2017-10-20 01:40:44

我能看到的唯一一件事是密码中可能有一个引号。您可能需要执行以下操作:

代码语言:javascript
复制
env _user="$USER" _pass="$pass" expect <<'END'
    set timeout -1
    spawn makepkg -Ascfi --noconfirm
    expect -nocase "password for $env(_user):" {
        send -- $env(_pass)
        send "\r"
    }
    interact
END

不需要在这里使用eval spawn

使用这里引用的文档也可以使代码更容易阅读。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46833742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档