stdin 및 stdout에 대한 명령줄 매개변수 규칙

stdin 및 stdout에 대한 명령줄 매개변수 규칙

저는 파일을 받아들이고 그 내용을 수정하는 명령줄 도구를 작성하고 있습니다. 나는 사용자 인터페이스가 가능한 한 표준화되기를 원합니다. 지금까지 나는

$ foobar -h
usage: foobar [-h] [--version] [infile] [outfile]

Some help text.

positional arguments:
  infile         input LaTeX file (default: stdin)
  outfile        output LaTeX file (default: stdout)

optional arguments:
  -h, --help     show this help message and exit
  --version, -v  show program's version number and exit

하지만 나는 이런 도구를 발견했습니다sed 언제나stdout인수가 제공 되지 않는 한 로 인쇄합니다 -i. 이 경우 입력 파일은 내부에서 수정됩니다. 이것이 일반적인 유닉스 규칙입니까?

답변1

-i구체적 이다 sed. 예를 들어, 다른 많은 awk경우 -i inplace내부 작업도 지원하지 않습니다.

많은 규칙이 있습니다. 결론은 입력이 없으면 STDIN이 사용되고, 출력이 없으면 STDOUT이 사용된다는 것입니다. 하지만 당신은 이미 그랬어요.

일반적으로 대부분의 프로그램은 명령줄의 파일 목록을 읽어야 하는 파일로 처리합니다. -o filename출력이 어디로 가야 하는지를 나타내기 위해 많은 프로그램에서 사용됩니다 filename. GNU --output도 이것을 좋아하는 것 같습니다.

STDIN 또는 STDOUT을 명시적으로 사용하려는 경우 --이를 지정하는 다소 표준적인 방법인 것 같습니다.

그러나 이 규칙을 따르지 않는 프로그램이 많이 있습니다. 일부는 마지막 위치 인수를 출력으로 사용합니다. 우리 중 일부는 --명령줄의 나머지 부분에는 파일만 포함되어 있다고 말하고 일부(예: dd)는 자체 표준을 만들었습니다.

그러니 내가 너라면, 난 그걸 고수할 거야-o 그리고 --output출력 파일에 사용되며 --STDIN 또는 STDOUT과 함께 사용됩니다. 그리고 프로그램을 예측할 수 있도록 명확한 매뉴얼 페이지를 작성하십시오.

관련 정보