bash 시퀀스 '\ 033 [999D'는 무엇을 의미하며 어디에 설명되어 있습니까?


19

터미널의 인쇄물에서 약간의 조작을 수행하는 데 사용되는 \033[999D및 bash 시퀀스 \033[2K\r를 발견했습니다. 그러나이 순서는 무엇을 의미합니까? 웹에서 이러한 시퀀스의 의미를 찾는 데 도움이되는 목록 / 요약을 어디에서 찾을 수 있습니까?


3
이것들은 bash 시퀀스가 ​​아닌 터미널 시퀀스입니다. 기능을 확인하려면 터미널 설명서를 확인해야합니다.
Chris Down

1
이러한 시퀀스는 출력을 채색하는 역할을합니다. 확인 : stackoverflow.com/questions/16845699/…stackoverflow.com/questions/5947742/…
adizere

1
@adizere 모든 이스케이프 시퀀스가 ​​색상 변경을 수행하는 것은 아닙니다. 이 Q의 순서는 선이 아닌 커서 이동을위한 것입니다.
케이시

답변:


32

이 링크 http://www.termsys.demon.co.uk/vtansi.htm을 참조하십시오 . Anthon이 말했듯 \033 이 이스케이프 문자의 C 스타일 8 진 코드입니다. 이것은 [999D커서를 999 열 뒤로 이동 시키며, 아마도 줄의 시작 부분에 도달하는 무차별 한 방법 일 것입니다. [2K현재 줄을 지 웁니다. \r는 캐리지 리턴으로 커서를 현재 줄의 시작 부분으로 다시 이동 시키며 터미널 제어 시퀀스가 ​​아닌 C 스타일 이스케이프 시퀀스입니다.

최신 정보

다른 사람들이 지적했듯이 이러한 제어 시퀀스는 bash자체적 으로 수행 하는 것이 아니라 텍스트가 나타나는 터미널 장치 / 에뮬레이터입니다. 옛날 옛적에이 시퀀스들은 완전히 다른 하드웨어에 의해 해석되는 것이 일반적이었습니다. 원래 각각은 완전히 다른 코드 세트에 응답합니다. 이 문제를 해결하기 위해 여러 터미널과 호환되는 코드를 작성하는 데 사용되는 라이브러리 termcapterminfo라이브러리. 이 tput명령은 terminfo라이브러리에 대한 인터페이스 ( termcap지원도 컴파일 가능)이며 호환 가능한 시퀀스를 만드는보다 강력한 방법입니다.

즉, ANSI X3.64 또는 ECMA-48 표준도 있습니다. 모든 최신 터미널 구현이 이것을 사용합니다. terminfotermcap구현이 불완전 또는 비 표준 확장을 포함 할 수있다 그러나 대부분의 경우는 일반적인 ANSI 시퀀스가 작동 할 것이라고 가정하는 것이 안전합니다, 아직 관련입니다.

xterm 자주 묻는 질문 현대 터미널 에뮬레이터 사이의 차이점에 대한 몇 가지 흥미로운 정보를 제공합니다 (많은 단지 모방하려고 xterm자신을)하는 방법과 xterm순서는 위의 링크에서 언급 된 VT100 터미널과 관련이있다. 또한 제어 시퀀스명확한 목록을xterm 제공합니다 .

물론 리눅스 콘솔 man console_codes은에 대한 비교와 함께 제어 시퀀스의 결정적인 목록을 찾을 수있는 리눅스 콘솔 xterm이다.


포함 된 링크는 내가 찾던 페이지 일뿐입니다.
Alex

@Alex Glad 나는 그것을 발견했다. 내가 본 대부분의 페이지는 단지 색상만을 다루고 어떻게 든 읽기가 복잡하다. 이것은 멋지고 간단합니다.
Graeme

이스케이프 코드의 동작은 터미널 유형에 따라 다릅니다 (그리고 최신 화면 / OS에서 여러 유형의 터미널을 에뮬레이션 할 수 있음). tput대신 명령을 사용하여 이식성을 높이기 위해 iirc를 사용할 수 있습니다 (단말기의 특정 기능을 덜 사용함 ). VT100 (페이지가 말한 것)은 많은 사람들이 지원하지만 모든 것이 지원되는 것은 아닙니다. 그러나 TERM 변수는 다른 터미널로 설정 될 수 있으며 이는 일부 명령의 영향에 영향을 줄 수 있습니다.
Olivier Dulac

@Olivier, 올바른 tput것이 더 강력한 방법입니다. 그러나 특정 VT100 터미널이 아닌 ANSI 호환성이므로 현재는 보편적 xterm으로 사용되지 않지만 모드를 허용하지 않는 모드 로 설정할 수 있다고 생각 합니다. 나는 이것에 대해 더 많은 정보로 업데이트 할 것입니다.
Graeme

@Olivier 많은 터미널 에뮬레이터도 설정 TERM=xterm했지만 모든 것을 구현 xterm하지는 않습니다.
Graeme

5

\033이스케이프 문자이며, 그 순서는 떠들썩한 파티 특정 아니지만의 (떠들썩한 파티) 프로그램을 실행하는 단말 (직렬 회선 또는 네트워크)를 통해 하드웨어 또는 소프트웨어 ()에 의해 해석했다. 이러한 시퀀스 가 많이 있습니다 .

각각의 기능은 종속 된 터미널에 따라 다르며 터미널의 상태를 변경하는 이전 순서에 따라 달라질 수도 있습니다.

이것들은 종종 bash prompt에서 색상 을 설정하는 데 사용 되지만 해당 페이지에서 특정 예제를 찾지 못했습니다.


3

'\ 033 [999D'는 웃기다. 일부 터미널은 이스케이프 시퀀스를 적게 구현하므로 '\ 033 [1G', '\ 033 [1; 1H', '\ 033 [1; 1f'또는 '\ r'중 어느 것도 동작하지 않는 경우에 필요할 수 있습니다. 그러나 누가 열 열 텍스트 표시를 사용해야합니까? 이 시퀀스는 Linux에서 console_codes (4) 매뉴얼 페이지를 갖습니다 . bjh21에는 모든 코드 의 자세한 목록이 있습니다 . '\ 033'을 (를) 구문 분석하는 프로그램에 따라보다 명확한 대체 '\ e'를 사용할 수 있습니다.

터미널 컨트롤 명령을 실행 하는 올바른 방법은 ncurses와 같은 추상화 계층을 사용하는 것이지만 직접 사용하는 것은 아니지만 문자열 리터럴에서도 작동합니다.


좋은 점은 방금 \033[999D이전 줄을 백업 한다고 가정했습니다 . 하지만 단지 코딩 사기의 결과 일 수있다, 또한 얻을 수있다) bash, 직접 예를 이스케이프 코드를 해석하는$'\033[999D'
그레엄

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.