기능 도움말 옵션 추가

기능 도움말 옵션 추가

NUM파일 세트의 시작 부분부터 줄을 인쇄하는 다음 기능이 있습니다 .

명령(함수, 스크립트 등)은 다양한 수의 인수를 허용하며 "사용 방법을 알려주십시오"에 대한 특수 옵션을 유지하고 싶습니다. 전통적인 선택은 "help", "-h", "-입니다. ?" 및 "--" 도움말".

headrc ()
{
    # Prints first set of lines from named files.
    # $1 NUM  Number of lines to print
    # $2 DIR  Directory

    num=$1
    dir=$2
      
    find "$dir" \( -name \*.org -o -name \*.texi \)  \
      | xargs head -n "$num";
}

답변1

이 작업은 수동으로 수행할 수도 있지만 getopt를 사용하는 것이 더 유용합니다. 예를 들어 다음을 고려하십시오.

#!/bin/bash

# Prints first set of lines from named files.
# $1 NUM  Number of lines to print
# $2 DIR  Directory
headrc() {
    eval set -- $(getopt --name "${FUNCNAME[0]}" --options h --longoptions help -- "${@}")

    while [[ "${1}" != "--" ]]; do
        case "${1}" in
        -h | --help)
            printf "Usage: ${FUNCNAME[0]} [-h|--help] <args>\n"
            return 1
            ;;
        *)
            printf "Unknown option: ${1}\n"
            ;;
        esac

        shift # Shift off option
    done
    shift # Shift off --

    local -r num="${1}"
    local -r dir="${2}"

    find "${dir}" \( -name \*.org -o -name \*.texi \) | xargs head -n "${num}";
}

getopt도구는 기존 인수( ${@})와 사용자가 제공한 옵션을 사용하여 모든 옵션이 먼저 오고 그 다음 a --, 다른 모든 옵션이 오도록 재정렬합니다. 이 --options옵션은 단일 문자 옵션과 --longoptions"긴"(다중 문자) 옵션을 지정합니다.

예를 들어:

$ getopt --options fh --longoptions file,help -- a b c -f d e --help g
 -f --help -- 'a' 'b' 'c' 'd' 'e' 'g'

매개 getopt변수가 있는 옵션을 지원하지만 여기서는 필요하지 않으므로 도구의 해당 측면을 다루지 않았습니다.

인수를 지정된 값으로 업데이트하여 eval set --함수를 해당 인수의 내용을 다시 작성한 출력으로 처리합니다 getopt.

옵션을 반복 while하고, 만나면 중지됩니다 --. see -h또는 --help도움말 메시지를 인쇄하고 반환합니다. 루프를 처리할 때마다 shift첫 번째 인수를 "닫는" 데 사용됩니다 .

이를 찾으면 --루프를 중지하고 매개변수를 전송합니다.

이제 넌 다 가졌어뒤쪽에옵션이므로 이전과 같이 위치 인수를 사용할 수 있습니다.

관련 정보