我遇到的是分界符为“EOF”的情况
<<EOF 和 末尾的EOF是一对,它俩中间的内容被当成输入交给 /usr/local/bin/expect 作为程序运行的子命令,搜了一下,像模像样的一个解释如下
在shell脚本中,通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主Shell。
EOF只是一个分界符,当然也可以用abcde替换。
当shell遇到<<时,它知道下一个词是一个分界符。在该分界符以后的内容都被当作输入,直到shell又看到该分界符(位于单独的一行)。
此分界符可以是所定义的任何字符串,其实,不一定要用EOF,只要是“内容段”中没有出现的字符串,都可以用来替代EOF,完全可以换成abcde之类的字符串,只是一个起始和结束的标志罢了。
使用的例子在我另一篇博客里:https://blog.csdn.net/Louzen/article/details/103635837
shell中嵌套expect
#!/bin/bash
# shell命令,例如
echo "hello world!"
# 设置在expect中要用的变量,因为这种情况下在expect代码里用set name value设置会获取不到变量
password="abc"
# shell中嵌套的expect开始
/usr/local/bin/expect <<EOF
# 下面的代码直到“EOF”前面都是复制上面“expect脚本”标题下的内容,设置变量部分除外
spawn scp test.sh admin@192.168.46.100:/tmp/
expect {
"(yes/no)?"
{
send "yes\n"
expect "*assword:"
{
send "$password\n"
}
}
"*assword:"
{
send "$password\n"
}
}
expect "100%"
# expect end
expect eof
EOF