터미널 속성이 터미널 외부와 다르게 보이는 이유는 무엇입니까?

터미널 속성이 터미널 외부와 다르게 보이는 이유는 무엇입니까?

터미널(xfce4-terminal 0.6.3, 그러나 문제가 될지 의심스럽습니다)을 열고 어떤 터미널 속성이 설정되어 있는지 확인하면(BASH가 터미널에서 실행 중입니다)

$ stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke -extproc

그런 다음 터미널 속성이 많이 있습니다. 충분하다. 내가 사용하고 있는 터미널을 살펴보면 다음과 같습니다.

$ tty
/dev/pts/0

그런 다음 터미널의 새 탭(새 탭은 /dev/pts/1임)에서 터미널 속성을 확인합니다.첫 번째터미널의 경우 터미널 속성이 약간 다른 것 같습니다.

$ stty -a -F /dev/pts/0
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = <undef>; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon -ixoff
-iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig -icanon iexten -echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke -extproc

여기의 원래 터미널은 표준 모드에 있지 않은 것 같고 문자 그대로 다음 특수 문자가 없다는 점에 주목할 가치가 있습니다.

그렇다면 왜 이런 일이 발생합니까? 예를 들어 현대에서 표준 모드를 ​​사용하는 경우와 같은 유사한 내용을 볼 수 있기를 원 ed하지만 다른 터미널에서 보면 Heisenberg 문제가 있는 경우 어떻게 해야 할지 모르겠습니다.

그래서 내 두 가지 주요 질문은 다음과 같습니다.

  1. 다른 터미널에서 볼 때 터미널의 속성이 다른 것처럼 보입니까? (예를 들어 첫 번째 터미널이 여전히 표준 모드에 있지만 stty -a -F잘못된 정보를 반환합니까?)
  2. 터미널에 있는 경우진짜다른 터미널로 전환할 때 속성이 변경되면 어떻게 알 수 있나요? 첫 번째 터미널을 직접 보지 않으면 어떻게 든 알림을 받나요?

추신: 또한 의사 터미널이 아닌지 확인하기 위해 Linux 콘솔에서도 이것을 시도했습니다. 결과는 동일합니다.

답변1

Bash는 명령줄 입력을 기다리는 동안 터미널을 한 번에 문자 모드로 설정해야 합니다. 그래야 emacs나 vi와 유사한 편집 문자를 사용하여 명령줄을 편집할 수 있습니다. 이는 다른 터미널에서 터미널 속성을 볼 때 예제에서 볼 수 있는 패턴입니다.

프로그램을 실행하기 직전에(예: stty) bash는 터미널을 표준 모드로 되돌립니다. 여기서 운영 체제는 백스페이스 및 Control-W와 같은 몇 가지 특수 편집 문자만 제공하며 기본적으로 프로그램은 Enter를 입력한 후에만 입력을 받습니다.

프로그램이 완료되거나 일시 중지된 후와 같이 Bash가 제어권을 다시 얻으면 터미널을 다시 문자 모드로 전환합니다.

관련 정보