터미널 프로그램이 따르는 "Rules" 규칙
(jvns.ca)-
최근 터미널에서 발생하는 모든 일이 다음 네 가지 요소의 조합임을 생각하게 됨
- 운영 체제의 역할
- 쉘의 역할
- 터미널 에뮬레이터의 역할
- 실행 중인 프로그램의 역할 (
top
,vim
,cat
등)
-
프로그램은 놀랍도록 일관되게 동작함
- POSIX는 터미널 에뮬레이터, OS, 쉘의 작동 방식을 주로 규정하지만, 개별 프로그램의 동작 방식에 대한 표준은 없음
- 그러나 터미널 프로그램은 대체로 일관된 방식으로 동작함
-
이 규칙들은 설명적이지 처방적이지 않음
- 터미널 프로그램의 저자들에게 이 규칙을 따라야 한다고 설득하려는 것이 아님
- 새로운 터미널 프로그램을 사용할 때 예상할 수 있는 기본 규칙을 아는 것이 유용함
-
프로그램의 책임이 명확하지 않은 경우가 있음
- 예를 들어,
Ctrl-D
를 눌러 REPL을 종료하는 것은 프로그램이 명시적으로 구현해야 함
- 예를 들어,
규칙 1: 비대화형 프로그램은 Ctrl-C
를 누르면 종료해야 함
- 비대화형 프로그램은 기본적으로
Ctrl-C
를 누르면 종료됨 - 대화형 프로그램에서는
Ctrl-C
가 다른 역할을 함
규칙 2: TUI는 q
를 누르면 종료해야 함
-
less
나htop
같은 TUI 프로그램은q
를 누르면 종료됨
규칙 3: REPL은 빈 줄에서 Ctrl-D
를 누르면 종료해야 함
- 대부분의 REPL은 빈 줄에서
Ctrl-D
를 누르면 종료됨
규칙 4: 16가지 이상의 색상을 사용하지 말아야 함
- 터미널 프로그램은 기본 16 ANSI 색상 외의 색상을 거의 사용하지 않음
규칙 5: readline 키 바인딩을 대략적으로 지원해야 함
- 대부분의 프로그램은
readline
키 바인딩을 지원함
규칙 5.1: Ctrl-W
는 마지막 단어를 삭제해야 함
-
Ctrl-W
가 마지막 단어를 삭제하지 않는 프로그램은 거의 없음
규칙 6: 파이프에 쓰기 시 색상을 비활성화해야 함
- 대부분의 프로그램은 파이프에 쓰기 시 색상을 비활성화함
규칙 7: -
는 stdin/stdout을 의미함
-
-
를 파일 이름 대신 전달하면 stdin에서 읽거나 stdout에 씀 -
이러한 규칙을 배우는 데 시간이 걸림
- 규칙이 어디에 적용되는지 배우고, 예외를 인식하며, 패턴을 무의식적으로 파악해야 함
- 이러한 규칙을 명시적으로 작성하면 다른 사람들이 배우는 속도를 높일 수 있음
Hacker News 의견
-
사용자 기본 전경색과 배경색을 존중해야 함
- 색상을 사용할 경우, 기본 배경색과 전경색에 관계없이 가독성이 있어야 함
- 색상만으로 정보를 전달하지 말아야 함
- 이모지는 신중하게 사용해야 함
- 스크롤링 출력에서 중요한 정보를 삭제하지 말아야 함
- 사용자에게 색상 및 시각적 요소를 선택할 수 있는 설정을 제공해야 함
-
Command Line Interface Guidelines를 추천함
- Ctrl-C로 종료, stdin을 위한
-
수용, 파이프에서 색상 비활성화 등의 규칙 포함
- Ctrl-C로 종료, stdin을 위한
-
명령줄 도구에 대한 추가 규칙
- 터미널 유형을 가정하지 말아야 함
- 터미널이 없을 수도 있음을 가정해야 함
- 인수 및 출력 구조에서 일반적인 관례를 따라야 함
- 표준
sysexits.h
종료 코드를 사용해야 함 - 이진 내
--help
및 매뉴얼 페이지를 포함해야 함
-
readline/emacs 키 바인딩에 대한 정보
- macOS에서 Ctrl-E, Ctrl-W, Ctrl-U 사용 가능
-
rlwrap
프로그램을 설치하여 라인 편집 기능을 추가할 수 있음
-
색상 사용에 대한 조언
- 16색 이상 사용하지 말아야 함
- 색상을 구성 가능하게 해야 함
-
GHCi에서 Ctrl-D 사용 시 발생하는 문제
-
:q
명령어로 종료해야 함
-
-
~
를 홈 디렉토리로 취급하는 것에 대한 설명- 쉘에서는 작동하지만 POSIX API에서는 작동하지 않음
-
프로그램이 홈 디렉토리에 파일을 추가하지 않도록 해야 함
- XDG_CONFIG_HOME을 존중해야 함
-
CLI의 일관성에 대한 의견
- CLI는 GUI보다 일관성이 높음
- GUI에 이 속성을 가져오는 것은 어려움
-
장기 실행 프로세스는 SIGHUP에서 구성을 다시 로드해야 함
-
SSH 연결에서 유용한 팁
-
~.
를 사용하여 SSH 세션을 종료할 수 있음
-