Bash

期望記錄中的奇怪輸出:如何消除,以及為什麼?

  • October 8, 2020

所以,我最近從 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機器,沒有發生這種情況。

這裡發生了什麼?

您的 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

引用自:https://unix.stackexchange.com/questions/613534