3P by GN⁺ 4달전 | ★ favorite | 댓글 1개
  • 최근 터미널에서 발생하는 모든 일이 다음 네 가지 요소의 조합임을 생각하게 됨

    • 운영 체제의 역할
    • 쉘의 역할
    • 터미널 에뮬레이터의 역할
    • 실행 중인 프로그램의 역할 (top, vim, cat 등)
  • 프로그램은 놀랍도록 일관되게 동작함

    • POSIX는 터미널 에뮬레이터, OS, 쉘의 작동 방식을 주로 규정하지만, 개별 프로그램의 동작 방식에 대한 표준은 없음
    • 그러나 터미널 프로그램은 대체로 일관된 방식으로 동작함
  • 이 규칙들은 설명적이지 처방적이지 않음

    • 터미널 프로그램의 저자들에게 이 규칙을 따라야 한다고 설득하려는 것이 아님
    • 새로운 터미널 프로그램을 사용할 때 예상할 수 있는 기본 규칙을 아는 것이 유용함
  • 프로그램의 책임이 명확하지 않은 경우가 있음

    • 예를 들어, Ctrl-D를 눌러 REPL을 종료하는 것은 프로그램이 명시적으로 구현해야 함

규칙 1: 비대화형 프로그램은 Ctrl-C를 누르면 종료해야 함

  • 비대화형 프로그램은 기본적으로 Ctrl-C를 누르면 종료됨
  • 대화형 프로그램에서는 Ctrl-C가 다른 역할을 함

규칙 2: TUI는 q를 누르면 종료해야 함

  • lesshtop 같은 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을 위한 - 수용, 파이프에서 색상 비활성화 등의 규칙 포함
  • 명령줄 도구에 대한 추가 규칙

    • 터미널 유형을 가정하지 말아야 함
    • 터미널이 없을 수도 있음을 가정해야 함
    • 인수 및 출력 구조에서 일반적인 관례를 따라야 함
    • 표준 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 세션을 종료할 수 있음