Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 通过Expect发送两次命令_Unix_Expect - Fatal编程技术网

Unix 通过Expect发送两次命令

Unix 通过Expect发送两次命令,unix,expect,Unix,Expect,我编写了一个Expect脚本,它登录到远程系统,按顺序执行一些命令,并将输出捕获到日志文件中 P>一切都很好,除了当我检查日志文件时,一些命令看起来会被发送两次,这样,下一个要发送的命令出现在前一个输出的中间。在检测到提示(这是正确的执行)时,它也会再次发送。而且,这一问题并不是在所有情况下都会发生,这更令人困惑 我想补充一点,我已经自定义了提示,以包含此“-->”。这便于通过另一个脚本进行输出解析 这是expect代码 set prompt "(]|%|#|>|\\$)" # go

我编写了一个Expect脚本,它登录到远程系统,按顺序执行一些命令,并将输出捕获到日志文件中

<> P>一切都很好,除了当我检查日志文件时,一些命令看起来会被发送两次,这样,下一个要发送的命令出现在前一个输出的中间。在检测到提示(这是正确的执行)时,它也会再次发送。而且,这一问题并不是在所有情况下都会发生,这更令人困惑

我想补充一点,我已经自定义了提示,以包含此“-->”。这便于通过另一个脚本进行输出解析

这是expect代码

set prompt "(]|%|#|>|\\$)"

# go to bash shell
expect -re $prompt
send "/bin/bash\r"

# customize the prompt
expect -re $prompt
send "PS1=\"\\u@\\H ---> \"\r"

# set new prompt into variable
expect -re $prompt
set newPrompt " ---> "

# opens file containing command list
set commFile [open commands.txt]

# reads each line containing commands from file, stores it in "$theLine" variable and sends it.
while {[gets $commFile theLine] >= 0} { 
    expect "$newPrompt"
    send "$theLine\r"
}

close $commFile
这就是我的输出的显示方式

"prompt --->" command1
----output----
----output----
command2
----output----
----output----

"prompt --->" command2
----output----
----output----
希望你能明白


我不理解这种行为,也无法在其他地方找到任何解决办法。有什么想法吗?

有一点逻辑问题:在发送
PS1=…
后,您会看到旧的提示。然后在循环中,您希望在发送另一个命令之前得到新的提示。这有用吗

send "PS1=\"\\u@\\H ---> \"\r"
set newPrompt { ---> $}
expect -re $newprompt
set commFile [open commands.txt]
while {[gets $commFile theLine] >= 0} { 
    send "$theLine\r"
    expect -re "$newPrompt"
}

显示更多的代码请下载,请查看,谢谢。这很有效!非常感谢,我没有意识到我期待了两次,却发送了一次:)