我正在尝试登录远程设备并将其输出写入文件。我想出了这段代码。但是在rez.txt文件中我得到了行“(buffer)”
我的代码非常基础 - 从手册,我不知道出了什么问题:
/usr/bin/expect << SSHLOGIN
spawn ssh -l $user $host
set timeout 100
expect {
"assword: " {
send "$password\r"
}
}
expect {
">" {
send "?\r"
}
}
expect {
"?" {
puts [open rez.txt w] $expect_out(buffer)
}
}
expect {
">" {
send "exit\r"
}
}
SSHLOGIN
答案 0 :(得分:1)
您似乎在bash脚本中调用Expect。
$expect_out
的{{1}}部分正在被shell取代。由于$expect_out(buffer)
未设置为任何内容,因此Expect程序实际上是这样做的:
$expect_out
所以它基本上是单词puts [open rez.txt w] (buffer)
。
要解决此问题,您需要转义(buffer)
,以便它不会被shell展开并正确传递给Expect,如下所示:
$expect_out
答案 1 :(得分:0)
expect的默认匹配模式是"glob",?是一个特殊的glob字符。发送“?”后,当expect看到一个字符时,就会写入输出文件。
如果你期望文字?,那么你想使用完全匹配:
expect -ex "?" {
puts [open rez.txt w] $expect_out(buffer)
}