POSIX 시스템 (예 : Linux, MacOSX)에서는 적어도 쉘 터미널 (예 : 대부분)에서 시작될 수있는 프로그램의 경우 GNU 코딩 규칙 (공통 인수 이름도 나열 됨)을 사용하고 POSIX 유틸리티 지침을 살펴 보는 것이 좋습니다. 독점 소프트웨어의 경우에도 :
항상 처리 --version
하고--help
(심지어도 /bin/true
받아들입니다 !!). 나는 이해하지 못하는 소프트웨어의 저자를 저주한다 --help
. 나는 그들을 싫어한다 ( 새로운 프로그램을 시도 prog --help
하는 첫 번째 명령 이기 때문에 )! 종종 다음 --help
과 같이 축약 될 수 있습니다-h
이 --help
(당신이 가장 일반적인 그 경우 목록에 ... 그들을 너무 많이하지 않는 한 모든 옵션 메시지 목록을 명시 적으로는 약간의 참조 man
및 옵션 기본값 페이지 또는 일부 URL), 그리고 아마도 중요한 (및 프로그램 별 ) 환경 변수. 옵션 인수 오류에 이러한 옵션 목록을 표시하십시오.
동의 -a
짧은 인수 (단일 문자) 및 일부 상당을 가지고 --long-argument
있으므로 -a2
--long-argument=2
, --long-argument 2
; 물론 당신은 (드물게 사용되는 옵션을 위해) 어떤 --only-long-argument
이름을 가질 수 있습니다 . 추가 옵션 -cf
이 없는 모달 인수의 경우 일반적으로 -c -f
등 으로 처리 되므로 -argument:value
제안이 이상 하므로 권장하지 않습니다.
GLIBC getopt_long 이상을 사용하십시오 (예 : argp_parse , OCaml에서는 Arg
모듈입니다 ...)
종종 -
표준 입력 또는 출력에 사용합니다 (그렇지 않으면 운영 체제가없는 일부 운영 체제에서도 처리 /dev/stdin
및 처리 /dev/stdout
)
대부분의 옵션 규칙을 재사용하여 유사한 프로그램의 동작을 모방합니다 . 특히 -n
드라 이런 (a la make
), -h
도움, -v
자세한 정보 등을 위해 ...
--
옵션과 파일 또는 다른 인수 사이의 구분자로 사용
프로그램 isatty
이 stdin 이 터미널 보다 테스트 하는 데 사용 하고 (이 경우 "대화식"으로 작동하는 경우) 프로그램에 GUI 인터페이스가 있고 ( getenv("DISPLAY")
X11 데스크탑에서 테스트하는 경우) 비 대화식 모드를 강제 실행하는 옵션을 제공하십시오. 배치 또는 명령 행에서 사용하십시오.
일부 프로그램 (예 gcc
:)은 간접 인수 목록을 허용하므로 다음 @somefile.txt
에서 프로그램 인수를 읽습니다 somefile.txt
. 이것은 프로그램이 매우 많은 인수를 수락 할 때 유용 할 수 있습니다 (커널의 것 이상 ARG_MAX
)
BTW, 당신은 심지어 당신의 프로그램과 일반적인 쉘 ( bash
또는 같은 zsh
)을 위해 자동 완성 기능을 추가 할 수도 있습니다
일부 오래된 유닉스 명령 (예 : dd
또는 심지어 sed
)은 이전 호환성을 위해 이상한 명령 인수를 갖습니다. 나는 그들의 나쁜 습관을 따르지 않는 것이 좋습니다 (당신이 더 나은 변형을 만들지 않는 한).
소프트웨어가 관련 명령 줄 프로그램의 시리즈에서 영감을 가지고 있으면 자식 수용 (당신은 분명히 개발 도구로 사용), git help
그리고 git --help
많은이 git
subcommand
와git
subcommand
--help
드문 경우이지만 argv[0]
, 프로그램에서 심볼릭 링크를 사용하여 다른 동작이있는 bash
것처럼 호출 될 수도 있습니다 ( 쉘 제한 ). 그러나 나는 보통 그렇게하지 않는 것이 좋습니다. 프로그램을 shebang을 사용하여 스크립트 인터프리터로 사용할 수 있다면, 즉 execve (2)에 의해 해석되는 첫 번째 라인에서 이해할 수 있습니다 . 그러한 트릭을 수행하는 경우 메시지를 포함하여 해당 트릭을 문서화하십시오 .rbash
#!
--help
POSIX에서 쉘 은 인자를 붙잡기 때문에 (프로그램을 실행 하기 전에 !) 쉘 이스케이프해야하는 옵션에 문자 ( *
또는 $
또는 같은)를 요구하지 마십시오 ~
.
경우에 따라 GNU guile 또는 Lua 와 같은 인터프리터를 소프트웨어에 내장 할 수 있습니다 ( 프로그래밍 언어 전문가가 아닌 경우 자체 Turing-complete 스크립팅 언어를 발명하지 마십시오 ). 이것은 소프트웨어 디자인에 깊은 영향을 미칩니다 (따라서 초기에 생각해야합니다!). 그런 다음 스크립트 나 표현식을 해당 인터프리터에게 쉽게 전달할 수 있어야합니다. 이 흥미로운 접근 방식을 취한다면 소프트웨어와 해석 된 기본 요소를주의해서 디자인하십시오. 이상한 사용자가 큰 스크립트를 코딩하도록 할 수 있습니다.
다른 경우에는 고급 사용자가 플러그인 을 소프트웨어에 로드하도록 할 수 있습니다 ( 동적 로딩 기술 (일명 dlopen
& & dlsym
)). 다시 말하지만 이것은 매우 중요한 디자인 결정 (플러그인 인터페이스를 정의하고 문서화 함)이므로 프로그램 옵션을 이러한 플러그인으로 전달하는 규칙을 정의해야합니다.
소프트웨어가 복잡한 경우 일부 구성 파일 (프로그램 인수의 추가 또는 교체)을 허용하고 모든 코드를 실행하지 않고 이러한 구성 파일을 테스트 (또는 구문 분석) 할 수있는 방법이있을 것입니다. 예를 들어, Exim 또는 Postfix와 같은 메일 전송 에이전트는 상당히 복잡하며 "반 건조"로 실행할 수있는 것이 유용합니다 (예 : 실제로 이메일을 보내지 않고 특정 이메일 주소를 처리하는 방법 관찰).
(가) 알 수 있습니다 /option
Windows 또는 VMS 것입니다. 파일 계층 구조가 /
디렉토리 분리 자로 사용되기 때문에 POSIX 시스템에서는 미쳤 으며 쉘은 글 로빙을 수행하기 때문입니다. 내 대답은 대부분 Linux (및 POSIX)입니다.
추신 가능한 경우, 프로그램을 무료 소프트웨어로 만드십시오. 일부 사용자 및 개발자로부터 개선이 이루어집니다 (그리고 새로운 프로그램 옵션을 추가하는 것이 종종 기존의 자유 소프트웨어에 추가하는 가장 쉬운 것 중 하나임). 또한 귀하의 질문은 의도 한 청중에 따라 크게 달라집니다 . 십대를위한 게임이나 할머니를위한 브라우저는 아마도 컴파일러, 데이터 센터 시스템 관리자를위한 네트워크 관리자 또는 마이크로 프로세서를위한 CAD 소프트웨어와 같은 종류와 양의 옵션이 필요하지 않을 것입니다 건축가 또는 교량 설계자. 프로그래밍 및 스크립팅에 익숙한 엔지니어는 아마도 할머니보다 훨씬 많은 조정 가능한 옵션을 선호하며 아마도 X11 (아마도 crontab
직장에서) 없이 응용 프로그램을 실행할 수 있기를 원할 것입니다 .
ls -ltr
옵션을 결합-l
,-t
및-r
. GNU 스타일 프로그램은 일반적으로--reverse
대신에 이중 하이픈이있는 단어 기반 옵션을 허용-r
합니다.-h
도움말을 표시하거나,--
옵션의 끝을-