나는 zsh
안으로 tmux
달려가고 있어요프레스토 악장, 기본 예상 스크립트가 올바르게 종료되지 않습니다.
set timeout -1
spawn $env(SHELL)
expect -regex ".*"
send "echo 'foo'\r"
expect -regex ".*foo.*\r"
send "^D"
expect eof
결과 는 예상한 대로 출력되고 스크립트는 종료됩니다. 하지만 키보드를 foo
누를 때까지 노출된 프롬프트는 삭제됩니다 . CTRL-C
이 시점에서 a가 %
인쇄되고 다음 줄이 나타납니다.
❯ ./modified-autoexpect-recording.exp
spawn /bin/zsh
echo 'foo'
❯ echo 'foo'
foo
~/ < ... fancy stuff ... ❯ ^C% # this was a manual CTRL-C event from a broken prompt
~/ < ... fancy stuff ... ❯ # this is working
직접 자동으로 예상되는 결과는 동일한 문제를 야기합니다. 내가 주목한 한 가지는 다음과 같습니다.
~/long/path/here ❯ ^C%
~/lo/pa/here ❯ # after exiting the frozen prompt
엔드 투 엔드 AutoExpect 예:
$: autoexpect
$: echo 'foo'
foo
$:[CTRL-D]
$: ./script.exp
$:[CTRL-C]%
$: # prompt works
다음 수정 후에도 동작은 동일하게 유지됩니다.
# changes at beginning
set log_user 0
set stty sane
# changes at end
send -- '^D' # -> send -- \x04
이는 축약되는 사용자 정의 프롬프트에 대한 경로와 관련이 있어야 합니다.
프롬프트 시스템을 변경하게 되어 기쁘지만, 이상적으로는 몇 가지 모드에서만 작동할 것으로 기대합니다.
나는 Don의 책(O'Reilly)을 검토 중이므로 아마도 답이 거기 있을 것입니다. 그동안 예상 프로그램을 정상적으로 종료할 수 있는 방법이 있나요?