(정말 쓸데없는) 터미널에 무한으로 무지개 그라데이션 만들기! (명령어도 길어서 스크린 잠금하지 않은 동료 터미널에 무지개를 띄우려 해도 한글자씩 입력하다가 결국 들켜버리고 만다!!!)
yes "$(seq 231 -1 16)" | while read i; do printf "\\x1b[48;5;${i}m\\n"; sleep .02; done
명령어 분석
yes
: 반복해서 명령어를 출력한다. 영원히!
yes 'All Work and No Play makes Jack a dull boy'
seq
: 일련의 연속된 숫자를 출력한다.
seq 1 3
: 1부터 3까지, 1씩 증가되는 숫자의 연속.
> seq 1 3
1
2
3
while
… : while
반복문 안에 담긴 명령어를 수행한다.
따라서, 위 명령어의 "$(seq 231 -1 16)"
는, 231부터 16까지 1씩 감소하는 숫자의 연속을 출력하고, yes
명령어로 인해 무한하게 출력이 진행되며, while
은 seq
명령어의 인자를 받아 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초 간격으로 무한히 출력하게 되는데…..
참고자료
yes 명령어