因此,我最近从 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