![복잡한 쉘 인터페이스가 있는 경우 Expect 스크립트를 어떻게 닫나요?](https://linux55.com/image/217640/%EB%B3%B5%EC%9E%A1%ED%95%9C%20%EC%89%98%20%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EA%B0%80%20%EC%9E%88%EB%8A%94%20%EA%B2%BD%EC%9A%B0%20Expect%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EB%8B%AB%EB%82%98%EC%9A%94%3F.png)
나는 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)을 검토 중이므로 아마도 답이 거기 있을 것입니다. 그동안 예상 프로그램을 정상적으로 종료할 수 있는 방법이 있나요?