Search
Duplicate
🪄

무지개빛 터미널

간단소개
주의) 취하지 않음 (중요)- 그저 10월이 되기 10분 전이여서 9월 포스트를 빠르게 작성하려 할 뿐…
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
잡지식
Shell
태그
잡지식
shell
Scrap
8 more properties

(정말 쓸데없는) 터미널에 무한으로 이션 만들기! (명령어도 길어서 스크린 잠금하지 않은 동료 터미널에 무지개를 띄우려 해도 한글자씩 입력하다가 결국 들켜버리고 만다!!!)

yes "$(seq 231 -1 16)" | while read i; do printf "\x1b[48;5;${i}m\n"; sleep .02; done
Shell

명령어 분석

yes : 반복해서 명령어를 출력한다. 영원히!
yes 'All Work and No Play makes Jack a dull boy'
Shell
seq : 일련의 연속된 숫자를 출력한다.
seq 1 3 : 1부터 3까지, 1씩 증가되는 숫자의 연속.
> seq 1 3 1 2 3
Shell
while… : while 반복문 안에 담긴 명령어를 수행한다.

따라서, 위 명령어의 "$(seq 231 -1 16)" 는, 231부터 16까지 1씩 감소하는 숫자의 연속을 출력하고, yes 명령어로 인해 무한하게 출력이 진행되며, whileseq 명령어의 인자를 받아 printf 명령어에서 먼가 흑마법을 실행한다… 그렇다면 printf 에 작성된 저 외계어는 과연 무엇일까?

그것은 바로 ANSI Color Codes!!! ANSI 코드를 사용하여 프롬프트 텍스트의 글자의 색을 바꿀 수 있다!!!

x1b[48;5;[n]m\n 은 배경색을 출력하는 코드이다. n의 범위는 0부터 255까지이며, 0부터 15는 기본 컬러 테이블, 232부터 255는 그레이스케일 컬러 테이블, 중간의 숫자들은 256 컬러 테이블이다. 참고로 \x1b[38;5;[n]m\n 은 글자색을 출력하는 코드로, 글자에 특정한 색을 입히고자 한다면, printf "\x1b[38;5;53mHello\n" 와 같이 입력하면 된다.

따라서 while문은 yes 명령어로부터 무한히 주어지는 seq의 16~231을 인덱스로 하여 배경색을 차례대로 0.2초 간격으로 무한히 출력하게 되는데…..

참고자료