에 의해 취소되면 일부 명령 행 인터페이스 도구가 깨진 콘솔을 반환합니다 CTRL+C
. 때로는 텍스트가 보이지 않거나 명령을 실행할 때까지 그래픽 문제가 있습니다 reset
.
(bash를 사용하지만 셸과 독립적이라고 생각합니다.)
이 효과의 이름이 있습니까? 이 문제의 원인은 무엇이며 프로그래머가 도구에서이를 방지하는 방법은 무엇입니까? 주요 프로그래밍 언어에서이 문제를 해결하는 전략이 있습니까?
stty sane
회색 수염에 대한
에 의해 취소되면 일부 명령 행 인터페이스 도구가 깨진 콘솔을 반환합니다 CTRL+C
. 때로는 텍스트가 보이지 않거나 명령을 실행할 때까지 그래픽 문제가 있습니다 reset
.
(bash를 사용하지만 셸과 독립적이라고 생각합니다.)
이 효과의 이름이 있습니까? 이 문제의 원인은 무엇이며 프로그래머가 도구에서이를 방지하는 방법은 무엇입니까? 주요 프로그래밍 언어에서이 문제를 해결하는 전략이 있습니까?
stty sane
회색 수염에 대한
답변:
콘솔 화면은 때때로 필요 reset(1)
(또는 stty(1)
일부 프로세스를 종료 (예를 들어, 프로그램이 쉘에 의해 시작) 할 때 의사 단말기의 상태가 변경되지 않기 때문에 명령).
tty demystified를 읽으십시오 .
(나는 의사 터미널 과 의사를 다루는 것이 리눅스에서 가장 어려운 부분이라고 생각한다)
주요 프로그래밍 언어에서이 문제를 해결하는 전략이 있습니까?
터미널을 다루고 모드 또는 회선 규율을 변경하는 올바르게 작동하는 프로그램은 충돌을 피하고 터미널을 올바른 상태 로 만들기 위해 적절한 호출 ( termios (3) 참조 )을 시도해야합니다 . BTW, ncurses 또는 readline 과 같은 라이브러리 가 유용하지만 정리 루틴을 적절하게 호출해야합니다.
signal (7) 및 signal-safety (7)을 참조하십시오 . 코드 충돌을 피하는 것은 어렵습니다. 정의되지 않은 동작 에 대해 읽으십시오 .
불완전한 해결 방법은 프로그램을 실행하는 쉘 함수를 정의한 다음 reset
(때로는 부적절 할 수 있는) 쉘 함수를 정의하는 것 입니다.
reset
과 다른 stty
설정 이 발생할 수 있습니다 .
stty -a > /tmp/test1
bash에서 시작한 다음 명령을 취소했습니다. 이제 터미널 색상이 빨간색이었습니다. stty -a > /tmp/test2
하지만 test1
과 test2
동일했다.
이 문제에 대응하는 것은 완전히 쉘 독립적이지 않습니다. zsh ttyctl
에는 tty 모드를 "고정"또는 "고정 해제"할 수 있는 내장 기능이 있습니다. bash에는 동등한 것이 없다고 생각합니다. setty
tcsh 의 명령은 동일한 작업을 수행하지만보다 세분화 된 : 개별 설정을 고정 할 수 있습니다.
tty 모드를 정지한다는 것은 zsh가 현재 모드를 기억한다는 것을 의미하며, 미래의 일부 하위 모드가 변경되면 하위 모드가 일시 중지되거나 종료 될 때 모드가 복원됩니다.
이렇게하면 터미널이 손상되거나 그렇지 않으면 터미널 정리에 실패하는 프로그램의 일부 나쁜 영향으로부터 보호 할 수 있습니다. 로 변경하려면 고정을 stty
해제해야합니다 stty
. 그렇지 않으면 쉘이 수행 한 작업을 즉시 취소합니다 .
reset
복원 stty
모드 이상의 기능을 수행 하므로 가끔 필요할 수도 있지만 자주는 아닐 수도 있습니다.