Bash
期望記錄中的奇怪輸出:如何消除,以及為什麼?
所以,我最近從 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