期望输出写入文件

时间:2013-11-13 11:05:36

标签: bash expect

我正在尝试登录远程设备并将其输出写入文件。我想出了这段代码。但是在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

2 个答案:

答案 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)
}