터미널 프로그램이 따르는 "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 세션을 종료할 수 있음 
 -