bash 명령 실행 전후에 tty 속성을 설정하는 방법은 무엇입니까?

bash 명령 실행 전후에 tty 속성을 설정하는 방법은 무엇입니까?

의사 터미널 슬레이브 파일을 열고 xterm실행 tty하고 봅니다(하나라고 가정 /dev/pts/0). 그런 다음 다른 것을 열고 xterm실행하십시오.

$ stty -F /dev/pts/0
speed 38400 baud; line = 0;
lnext = <undef>; discard = <undef>; min = 1; time = 0;
-brkint -icrnl -imaxbel iutf8
-icanon -echo

/bin/sleep 1000그런 다음 먼저 xterm에서 실행하십시오. 그런 다음 stty두 번째 xterm에서 동일한 명령을 다시 실행하십시오.

$ stty -F /dev/pts/0
speed 38400 baud; line = 0;
-brkint -imaxbel iutf8

sleep그런 다음 첫 번째 xterm에서 명령을 종료합니다 . 그런 다음 stty두 번째 xterm에서 동일한 명령을 다시 실행하십시오.

$ stty -F /dev/pts/0
speed 38400 baud; line = 0;
lnext = <undef>; discard = <undef>; min = 1; time = 0;
-brkint -icrnl -imaxbel iutf8
-icanon -echo

bash는 명령을 실행하기 전에 tty 속성을 변경하고 명령을 실행한 후에 이를 복원하는 것을 볼 수 있습니다. bash 문서의 어디에 설명되어 있습니까? 모든 tty 속성이 복원됩니까, 아니면 프로그래밍 방식으로 변경된 경우 일부 속성이 복원되지 않을 수 있습니까?

답변1

readline(3)이것은 일반적으로 bash의 일부로 정적으로 구축되지만 다른 프로그램에서도 사용되는 줄 편집 라이브러리 입니다 .

사용자의 명령을 읽기 시작할 때마다 readline은 터미널 설정을 저장하고 터미널을 "원시" 모드 [1]로 설정하여 삽입 지점을 왼쪽과 오른쪽으로 이동하고 readline(3)반환할 때 기록에서 명령을 호출합니다(예: 사용자가 Enter를 누르면) 터미널의 원래 설정이 복원됩니다. Readline은 신호를 망칠 수도 있습니다.수수께끼 같은 행동.

를 strace하는 경우 ( whichimplements ) 및 ( ) bash를 찾으십시오 . bash를 실행하면 터미널 설정이 유지되는 것을 알 수 있습니다 .ioctl(TCSETS*)tcsetattr(3)ioctl(TCGETS)tcgetattr(3)stty(1)--noediting

[1] 정확히 "원시" 모드는 아니지만 cfmakeraw(3)구체적인 세부 정보를 볼 수 있습니다.여기. 이러한 모든 터미널 설정은 termios(3)맨페이지에 문서화되어 있습니다.

관련 정보