그래서 최근 Debian에서 Fedora로 전환했는데 기본 Fedora BASH 셸에서 이상한 점을 발견했습니다.
명령을 실행 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 ~\]\$ "
데비안의 유사한 레코드에는 다중 처리 쓰레기처럼 보이는 것이 없습니다.
설상가상으로 이것은 autoexpect
명백한 쉘 추상화 계층으로 인해 간단한 매크로를 기록한 후에 완전히 실행되지 않는 일류 Linux 배포판입니다.
이는 제가 페도라 쉘에서 하고 있는 작업이 쉘 내의 쉘에 있고 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