2014-02-26 3 views
1

나는 명령 줄 인수를 구문 분석하고있는 셸 스크립트가 있습니다. 나의 주장은 그 속에 길이있다. 예 : mycript.sh -c test -s global -n /mydir/test1 -d /orgdir/test35 스크립트를 실행하고 경로 (특수 문자 "/")가 포함 된 인수를 반향하면 빈 경로가 표시됩니다. 이 에코의쉘 스크립트에서 명령 줄 구문 분석

#/!bin/bash 
... 

while getopts c:hs:n:d opt 
do 
case "$opt" in 
c) INST=$OPTARG;; 
d) INST_DIR=$OPTARG;; 
h) usage;; 
s) METHOD=$OPTARG;; 
n) MAINTENANCE_DIR=$OPTARG;; 
\?) usage;; 
esac 
done 

echo INST dir is [$INST_DIR] 
echo MAINTENANCE dir is [$MAINTENANCE_DIR] 
....... 

결과

INST dir is [] 
MAINTENANCE dir is [] 
가 가

누군가가 여기에 잘못된 무엇인지 말할 수있다?

INST dir is [] 
MAINTENANCE dir is [/mydir/test1] 

내가 같이 스크립트의 라인 (4) 변경 :

스크립트와
+0

귀하의 문제에 대한 직접적인 해결책은 아니지만 [docopt] (https://github.com/docopt/docopts)에서 구문 분석 할 수있는 휴대용 언어를 사용하는 것이 좋습니다. 인수. – zmo

+0

'docopt'는 여전히 제 3 자 솔루션입니다. 'getopts'는'bash'의 일부이기 때문에 완전히 이식 가능합니다 (어쨌든'bash'가 사용 가능하다는 전제하에). – chepner

답변

2

, 나는 다른 결과가

while getopts c:h:s:n:d: opt 

그것은 bash 버전으로, Cygwin에서 아래에 나를 위해 잘 작동 4.1.10 (4) -lease.

+0

+1 여기와 같습니다. 원래 유일한 문제는 옵션 목록에':'* * *'d'가 없다는 것입니다. – chepner

관련 문제