이것은 내가 시도한 모든 배포에서 발생합니다.
$ 고양이 | bash-3.2$ ls 풍부한 바 bash-3.2$
이제 세션이 일시 중지되었습니다. 즉, 당신은 얻습니다하나명령을 실행하면 터미널 창을 거의 닫아야 합니다. SIGTERM(일명 ^C)은 bash에 의해 감지되지만 작업 쉘로 돌아갈 수는 없습니다.
나는 이것이 bash가 tty 제어를 위해 cat과 싸우게 하는 것과 관련이 있다고 추측 -i
하지만 명확한 정보를 찾을 수 없습니다. 무슨 일인지 설명해 줄 수 있는 사람 있나요? 실행 중인 프로그램을 execlp("/bin/bash", "bash", "-i")
중단 없이 자동으로 시작하는 방법은 무엇입니까? expect
tty의 예외를 처리하려면 유사한 프로그램을 작성해야 합니까 ?
답변1
짧은 답변: 예, Expect를 사용해야 합니다.
에 관해서는왜실패합니다. 동작에 따라 bash -i
open readline
( 을 사용하더라도 --noediting
)은 파이프에서 상당히 나쁘게 동작합니다. 또한 stdout
터미널 모드(비차단 모드 포함)를 설정하는 대신 통과하는 것으로 보이며 stdin
이는 대부분의 제어 문자의 예상 동작을 잃게 됨을 의미합니다. (단, tty를 직접 읽지는 않습니다.)
참고 사항: 대신 ^C
보내세요 . 그러나 둘 다 대화형( ) 모드 에서 멈춰 있습니다 .SIGINT
SIGTERM
-i
SIGHUP