Expect 录音中的奇怪输出:如何消除,以及原因?

Expect 录音中的奇怪输出:如何消除,以及原因?

因此,我最近从 Debian 切换到 Fedora,并注意到默认的 Fedora BASH shell 中有一些奇怪的地方。

如果我运行autoexpect并记录命令,则会生成以下类型的输出:

# demo of the recording

autoexpect 
env > foo
Ctrl-D
# the script expect statement recording

# notice that expect recorded output prior to sending the command!

set timeout -1
spawn $env(SHELL)
match_max 100000

expect -exact "^[\]777;notify;Command completed;env > foo^[\\^[\]777;precmd^[\\^[\]0;chris@localhost:~^[\\^[\]7;file://localhost.localdomain/home/chris^[\\\[chris@localhost ~\]\$ "
send -- "env > foo\r"
expect -exact "env > foo\r
^[\]777;preexec^[\\^[\]777;notify;Command completed;env > foo^[\\^[\]777;precmd^[\\^[\]0;chris@localhost:~^[\\^[\]7;file://localhost.localdomain/home/chris^[\\\[chris@localhost ~\]\$ "

我不会在 debian 中的类似记录中看到任何看起来像多处理垃圾的东西。

更糟糕的是,这是一个一流的 Linux 发行版,autoexpect由于这个明显的 shell 抽象层,在我录制一个简单的宏后,它完全无法运行。

这似乎是因为我在fedora shell中的操作是在shell中的shell中,并且expect实际上记录了自动生成的标志响应 send -- "env > foo\r"被记录。

此外,我已经攻击了一台远程fedora机器,但没有发生这种情况。

这里发生了什么?

答案1

您的 Fedora bash 提示符与 Debian bash 提示符不同。

你可以在期望中做这样的事情:

set prompt "$ "

spawn bash
send "unset PROMPT_COMMAND; PS1='$prompt'\r"

expect $prompt
send "env > foo\r"

expect $prompt
send "\x04"    ;# Ctrl-D
expect eof

相关内容