Bash 스크립트: 도움말 파일이 스크립트 내부에 있습니까, 아니면 다른 파일에 있습니까?

Bash 스크립트: 도움말 파일이 스크립트 내부에 있습니까, 아니면 다른 파일에 있습니까?

저는 완전한 기능을 갖춘 프로그램이 되겠다는 최종 목표를 가지고 스크립트를 작성하고 있습니다. 내가 아는 한 BASH는 그의 목적(Y-PPA와 같은 PPA 관리)에 충분합니다. help 출력 방법을 알고 싶습니다 myscript --help.

현재 도움말은 echo -e스크립트 내에 직접 작성되며 호출을 사용합니다 if [ "$1" == "--help" ] || [ "$1" == "-h" ](곧 getopts로 전환할 계획입니다).

하지만 무엇이 더 낫습니까? 해당 help부분을 스크립트에 남겨두시겠습니까, 아니면 도움말이 포함된 다른 파일을 호출하는 줄을 작성하시겠습니까?

제 생각에는 다음과 같은 이유로 스크립트에 그대로 두는 것이 더 나을 수도 있습니다.

  • 내 프로그램은 여전히 ​​텍스트 파일 스크립트입니다.
  • 하드 드라이브 공간을 절약해줍니다.
  • 손상되었거나 다른 위치에 있을 수 있는 다른 파일을 표시할 때 오류를 방지합니다.

그러나 다음과 같은 이유로 도움말이 포함된 다른 텍스트 파일을 사용하는 것이 더 나을 수도 있습니다.

  • 명령으로 호출되는 기본 스크립트 myscript가 더 가벼워집니다.
  • 사람이 스크립트를 읽는 것을 단순화합니다.
  • 필요한 경우 도움말 페이지를 개별적으로 업데이트할 수 있습니다.
  • GUI를 사용하여 도움말 페이지를 표시하거나 인쇄하도록 허용할 수도 있습니다.

알다시피, 나는 이것을 수행하는 "일반적인" 방법이 무엇인지 모릅니다. 감사해요!

추신: 또한 완전한 프로그램을 출시할 계획이므로 매뉴얼 페이지가 있으면 좋을 것이므로 어쨌든 1개 이상의 파일을 제공해야 할 것입니다. 아마도 .deb일 수도 있습니다.

답변1

나는 Ouki의 의견에 동의합니다. 지금은 스크립트 내에서 간단하게 유지하세요. 매뉴얼 페이지가 필요하다고 결정하면 그곳으로 포팅하고 간단한 도움말을 남길 수 있습니다.

개별 파일과 비교하여 이 접근 방식의 4가지 단점 중 3가지를 확인하세요.

  • myscript 명령을 사용하여 호출되는 기본 스크립트는 더 가벼워집니다.

    메모리에 로드된 바이트 수는 미미합니다. 생각하기에는 너무 미미합니다.

  • 사람이 스크립트를 읽는 것을 단순화합니다.

    체계적으로 잘 정리되어 있다면 그 반대가 됩니다. 왜냐하면 소스 코드의 도움말은 코드 자체에 대한 문서 형식이기 때문입니다(아래 참조).

  • GUI를 사용하여 도움말 페이지를 표시하거나 인쇄하도록 허용할 수도 있습니다.

    Unix 스타일 시스템에서 모듈성을 강조한다는 것은 이에 대해 신경 쓰지 않는 것이 더 낫다는 것을 의미합니다. 스크립트가 표준 출력으로 작성되면 사용자는 이를 자신이 선호하는 인쇄 및 표시 도구와 결합할 수 있습니다. 작성자가 선호하는 문서 보기 방식 등 불필요한 기능을 구현하려고 애쓰는 프로그램보다 더 짜증나는 것은 없습니다. 그러지 마세요. 프런트엔드 명령줄 도구인 경우 일반 출력은 표준 출력 스트림으로 이동하고 오류는 표준 오류 스트림으로 이동해야 합니다. 미쳐 가지 마세요.

당신이 모른다면"여기" 파일, 작업을 단순화하고 소스 코드를 더 깔끔하고 읽기 쉽게 만들 수 있습니다.

#!/bin/bash

function myHelp () {
# Using a here doc with standard out.
cat <<-END
Usage:
------
   -h | --help
     Display this help
   -n
     Do nothing loudly.
END
}

doNothing=0;
while [ -n "$1" ]; do
    case "$1" in
        -h | --help)
            myHelp
            exit
            ;;
        -n)
            doNothing=1;
            shift
            ;;
    esac 
done 

if [ $doNothing -gt 0 ]; then
    echo -e "****\nDoing nothing!\n****"
fi        

if블록을 깔끔하게 유지하는 도움말 옵션을 호출하는 함수가 있습니다 . 이는 또한 함수를 변환할 수 있음을 의미합니다.상단에, 소스 자체에 대한 명확한 참조 형식이 됩니다.

여기에서 문서를 들여쓰기할 수 있습니다 myHelp(). btw - 탭은 무시되지만 공백은 유지됩니다. 잘라내어 붙여넣을 때 발생하는 혼란스러운 결과를 방지하기 위해 이 작업을 수행합니다.

답변2

여기서 본 두 가지 방법이 더 있습니다.

  • 인라인 부분을 설정하거나POD와 유사한도움말로 표시되는 문서 또는
  • .man로컬 man구조 에 추가할 파일을 올바르게 정의합니다.

매우 큰 도구가 있고 인터페이스/GUI가 이미 다른 파일에 있는 경우를 제외하고는 솔직히 이러한 도움을 제공하기 위해 별도의 파일을 갖는 것이 의미가 없다고 생각합니다.

그러니 머물러라”단정하고 깔끔": 명령줄 프런트엔드에 대한 모든 내용이 하나의 파일에 있습니다.

인라인 텍스트나 도움말 표시만을 목적으로 하는 적절하게 정의된 함수로 구성할 수 있습니다. 따라서 지금부터 10년 동안 스크립트를 유지 관리하는 불쌍한 사람에게는 이것이 나쁜 일이 아닙니다.

관련 정보