0

我正在尝试创建一个使用 Expectk 和 rmt 命令的 tcl 脚本。我可以生成一个 rmt 进程并获得正确的进程 ID,但我使用的发送命令不起作用。我从手册页中注意到,普通的发送命令是为不同的目的而定义的,所以我应该使用 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 命令。

4

2 回答 2

0

尝试\n\r在每个命令的末尾发送。以下类型对我有用(注意,使用 raw expect):

spawn "rmt"

send "O/goo/bar\n\r"
    expect  "E22" {
    puts "Error!!!"
}
于 2013-11-13T21:40:35.883 回答
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"
}
于 2013-11-13T22:11:19.713 回答