이 에코 쉘 명령 사용은 무엇을합니까?


0

내가 echo -n $'\e]0;Hello World\a'작업중 인 코드베이스의 일부인 쉘 스크립트를 발견 했습니다. 정확히 무엇을합니까? 그것은 눈에 보이는 것을 반향시키지 않습니다.

참고로 Ubuntu 12.04.5를 사용하고 있습니다.


이미 제공된 답변 외에도이 명령에 사용되는 구문은 이식성이 없으므로 POSIX와 동등한 것이 좋습니다 printf "\033]0;Hello World\07".
jlliagre

답변:


2
  • -n 끝에 줄 바꿈을 방지합니다.
  • $'문자열의 백 슬래시 이스케이프 문자를 ANSI C 표준에 지정된대로 바꾸도록하는 Bash 명령입니다. 더 많은 정보
  • \e = ESCape.
  • \e]0;창 제목을 설정 하는 명령 입니다.이 경우 "Hello World"로 설정하십시오.

* nix Echo에 대한 자세한 정보는 여기에서


1
이것은 정확하지 않습니다. \e[0;일반 텍스트 모드를 \e]0;설정 하지만 창 제목을 설정합니다. ANSI Control Sequence Introducer (CSI, \e[)와 Operating System Command (OSC, \e]) 의 차이점 은 중요하지만 놓치기 쉽습니다.
Gordon Davisson

@GordonDavisson 눈이 좋았습니다. :)
Ƭᴇcʜιᴇ007

1
당신은 여전히 ​​대답이 약간 잘못되었습니다. \a이 특별한 경우 최종 은 종을 울리지 않지만 창 제목의 끝 구분 기호로 이스케이프 시퀀스의 일부입니다.
jlliagre

3

XTerm (또는이를 에뮬레이트하는 것)에서 창의 제목을 "Hello World"로 설정합니다. \e]"OSC (operating system command)"에 대한 ASNI 이스케이프 코드입니다. 이는 본질적으로 의미를 정의하는 것이 운영 체제에 달려 있음을 의미합니다. XTerm에서는 <OSC>0;text<bel>창 제목을 설정하는 데 사용됩니다.

참조 위키 피 디아 , 그리고 에드워드 Moy와의 텀 순서 목록 (이하 "운영 체제 제어"섹션 검색).


0

\e]0;유효한 ANSI 코드가 아닙니다. "정상 디스플레이"를 얻으려면이어야 \e[0m합니다. Ƭᴇcʜιᴇ007의 링크 아래에있는 텍스트에서 알 수 있듯이 동일한 순서로 여러 가지를 결합 할 수 있습니다.

$ echo -en "\ e [0; 31; 7m 테스트 \ e [0m"  
 테스트 $ _

TEST역 빨간색 될 것
이스케이프 시퀀스 구문 분석에 대한 -e 필요합니다. -n 에코 가 끝에 (CR +) LF를 인쇄 하지 않도록 합니다.

더 나은 방법은 tput명령 을 사용하여 terminfo 코드를 사용하는 man 5 terminfo것입니다. 기술적이지만 상당히 완성 된 것입니다. 왜 풋? 터미널은 항상 ANSI가 아니기 때문에 terminfo는 가능한 한 많은 터미널에 단일 인터페이스를 제공하여이를 수정하려고 시도합니다.

... 그래서 -ANSI 터미널이 있다면- echo "$(tput sgr0)"와 같습니다 echo -e "\e[0m".

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