之前我写expect脚本喜欢在bash中嵌入here-document来实现,因为这样往expect脚本中传shell变量比较方便。
结果最近发现有个问题,当我用while读文件的时候,变量值全部为空。
这是因为here-document中把变量当作是bash的变量,而不是expect中的变量。
所以在shell中嵌入expect的话,需要用转义屏蔽bash的变量。
(记住,如果想用shell变量的地方,就用$,用expect变量的地方,就用\$)
#!/bin/bash
content='Line'
expect <<EOF
set file "hello.txt"
set fd [open \$file r]
set n 0
while {[gets \$fd line] != -1} {
incr n
puts "$content\$n: \$line"
}
close \$fd
EOF
参考:
http://bbs.chinaunix.net/thread-3566066-1-1.html