bash는 터미널이 개행(\n)을 캐리지 리턴(\r)으로 변환하도록 합니까?

bash는 터미널이 개행(\n)을 캐리지 리턴(\r)으로 변환하도록 합니까?

두 개의 터미널을 열고 아래 터미널에서 cat위 터미널을 읽기 위해 실행했습니다.

여기에 이미지 설명을 입력하세요

위 터미널에 를 입력했는데 "Hello World<Enter>Bye"위 터미널에서 Enter키를 캐리지 리턴( \r)으로 보낸 것 같습니다.

그러면 줄 바꿈( )을 캐리지 리턴( ) 으로 bash변환하도록 터미널 설정을 변경 합니까?\n\r

답변1

Bash는 터미널을 "원시" 모드로 변경했습니다. 이는 입력 문자가 어떤 방식으로도 처리되지 않음을 의미합니다. Enter 키는 줄 바꿈(\n)이 아닌 캐리지 리턴 문자(\r)를 생성하므로 변환이 수행되지 않습니다.

답변2

날것의그리고요리모드는 설명적인 용어입니다. stty rawbash와 다른 설정을 사용합니다.

Bash는 다음에서 터미널 초기화를 수행합니다.prepare_terminal_settings(readline 라이브러리의 내부 함수), 에코 없이 한 번에 한 문자를 읽을 수 있도록 터미널 모드를 설정합니다:

  tiop->c_lflag &= ~(ICANON | ECHO);

그러나 캐리지 리턴 변환은 다음에서 재설정됩니다.함수의 다른 부분:

  /* Make sure we differentiate between CR and NL on input. */
  tiop->c_iflag &= ~(ICRNL | INLCR);

prepare_terminal_settings와 비교해보면코어 유틸리티stty, 후자는 더 적은 작업을 수행합니다(몇 가지 포인트가 있지만 bash INLCR도 재설정됨).

      else if (STREQ (정보->이름, "원시") || STREQ (정보->이름, "요리됨"))
        {
          if ((정보->이름[0] == 'r' && 반전)
              || (정보->이름[0] == 'c' && !reversed))
            {
              /* 쿠킹 모드. */
              모드->c_iflag |= BRKINT | IGNPAR | ISTRIP | ICNL | 익손;
              모드->c_oflag |= OPOST;
              모드->c_lflag |= ISIG | 아이카논;
#if VMIN == VEOF
              모드->c_cc[VEOF] = CEOF;
#endif
#if VTIME == VEOL
              모드->c_cc[VEOL] = CEOL;
#endif
            }
          또 다른
            {
              /* 원시 모드. */
              모드->c_iflag = 0;
              모드->c_oflag &= ~OPOST;
              모드->c_lflag &= ~(ISIG | ICANON
#ifdef XCASE
                                 | X케이스
#endif
                );
              모드->c_cc[VMIN] = 1;
              모드->c_cc[VTIME] = 0;
            }
        }

POSIX는 다음과 같이 말합니다.stty raw:

원시 입력 및 출력을 활성화(비활성화)합니다. 원시 모드는 다음 설정과 동일합니다.

stty cs8 erase ^- kill ^- intr ^- \
    quit ^- eof ^- eol ^- -post -inpck

-post흥미롭게도 ( 및 설명에 따라 -inpck) 입력 시 캐리지 리턴 변환을 다루지 않습니다.

약관 이후날것의그리고요리(POSIX 또는 coreutils stty)는 bash가 수행하는 작업과 일치하지 않습니다. 실제로 수행하는 작업에 해당하는 POSIX termios 기능을 언급하는 것이 좋습니다.icrnl(캐리지 리턴을 개행 번역으로 입력).

관련 정보