2009-09-25 4 views
3

명령이 호출 될 때마다 정보를 캐시하는 래퍼 셸 스크립트를 작성하려고합니다. 첫 번째 옵션이 아닌 인수 만 저장하면됩니다. 예를 들어,첫 번째 비표준 명령 줄 인수 검색

$ mycommand -o option1 -f another --spec more arg1 arg2 

에서 나는 검색 할 "ARG1을."

어떻게하면 bash에서이 작업을 수행 할 수 있습니까?

답변

6

getopt을 사용하면 아마도 갈 수 있습니다. 당신이 bash는 인수 스캔 코드를보고 싶어하면

는 비 getopt는 방법은 다음과 같습니다

realargs="[email protected]" 
while [ $# -gt 0 ]; do 
    case "$1" in 
     -x | -y | -z) 
     echo recognized one argument option $1 with arg $2 
     shift 
     ;; 
     -a | -b | -c) 
     echo recognized zero argument option $1, no extra shift 
     ;; 
     *) 
     saveme=$1 
     break 2 
     ;; 
    esac 
    shift 
done 
set -- $realargs 
echo saved word: $saveme 
echo run real command: "[email protected]" 
1

당신은 아마 getopt 뭔가를 (사용하는 방법에 대한 here 또는 here)을 보면하고 싶어.

전체 명령 줄을 저장하면 (실제 도구에 그대로 둡니다) getopt과 함께 인수를 처리하고 필요한 정보를 얻은 다음 밑줄 도구를 실행할 수 있습니다.

+0

당신은 Bash 내장 "getopts"를 언급하고 있습니다. 그러나, 당신은 "s"를 중단했습니다. "s"가없는 "getopt"는 유사한 기능을 가지고 있지만 완전히 다르게 작동하는 독립 실행 형 실행 파일'/ bin/getopt '을 참조합니다. –

+0

IIRC,'getopts'는 긴 옵션을 처리하지 않지만'getopt'는 처리합니다. –

+1

getopt를 사용하여 arg1을 쉽게 얻을 수있는 쉬운 방법이 있습니까? – user122147

2

전체 명령 행을 검사하지 않고 특정 인수를 선택하는 방법은 없습니다. 그 이유는 명령 행에서 상대적인 위치에 관계없이 모든 옵션이 순서대로 나타날 수 있다는 bash의 기본 가정입니다. 다른 전제는 짧은 또는 긴 형식 (즉, "-f"또는 "--file")으로 설명서 페이지에 지정된 모든 옵션은 명령 실행에서 유효하고 인식 된 사용을 갖게된다는 것입니다.

가장 좋은 방법은 DigitalRoss에서 제공하는 예제를 사용하고 명령에 대한 유효한 옵션마다 case 문 값을 코딩하거나 스크립트에서 다루고 싶은 코드 만 코딩하는 것입니다. "*)"구문을 사용하여 다른 모든 것을 캡처하고 해당 테스트에 해당하는 경우 무시합니다. 요령은 특정 옵션에 하나 이상의 유효한 인수가있는 경우 인수의 구별이 인수의 내용을 기반으로하는 위치 일치 또는 패턴 일치인지 여부를 미리 알아야한다는 것입니다. 또한 여러 인수가있는 옵션의 경우 한 인수에서 다음 인수로 이동하려면 "건너 뛰기"지시문을 사용해야합니다.