当我运行这个我写来帮助安装AUR包的脚本时:
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语句后进行了交互,我遗漏了什么吗?
发布于 2017-10-20 01:40:44
我能看到的唯一一件事是密码中可能有一个引号。您可能需要执行以下操作:
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。
使用这里引用的文档也可以使代码更容易阅读。
https://stackoverflow.com/questions/46833742
复制相似问题