如何在tcl脚本中使用rmt命令? (Expectk)

时间:2013-11-13 18:07:21

标签: shell tcl expect

我正在尝试创建一个使用Expectk和rmt命令的tcl脚本。我可以生成一个rmt进程并获取正确的进程ID,但是没有使用的send命令。我在手册页中注意到,为了不同的目的定义了普通的send命令,所以我应该使用exp_send。

这是脚本。我想要做的就是获取磁带机的状态:

#!/bin/sh
# Restarts using wish in the command search path
exec expectk "$0" -- "$@"

set stored_id [spawn "rmt"]
exp_send -i $stored_id "O/dev/nst0\r"
exp_send -i $stored_id "S\r"

编辑:这是通常从命令行使用命令的方法:

$ rmt
O/dev/nst0
S
A0
^C

“A0”是命令的响应,^ C是我按Ctrl-C退出rmt命令。

2 个答案:

答案 0 :(得分:0)

尝试在每个命令的末尾发送\n\r。以下类型的工作对我来说(注意,使用原始expect):

spawn "rmt"

send "O/goo/bar\n\r"
    expect  "E22" {
    puts "Error!!!"
}

答案 1 :(得分:0)

@ AlexanderL.Belikoff让我走上正轨。

我一开始并不完全理解这个命令的手册页。以下似乎可以打开设备进行读写,并获得设备的状态。状态将自动显示在屏幕上,但“获得状态”部分仅表示命令已成功执行。

#!/bin/sh
# Restarts using wish in the command search path
exec expectk "$0" -- "$@"

spawn "rmt"
exp_send "O/dev/nst0\r"
exp_send "O_RDRW\r"
expect "A0" {
    puts "Success!"
}

exp_send "S\r"
expect "A" {
    puts "Got the status"
}