2014-10-21 1 views
0

bash 스크립트에서 getopts에 문제가 있습니다. 기본적으로 내 스크립트 같은 호출되어야 할 것이다 :첫 번째 옵션이 bash의 경로 일 때 getopts

./myScript/경로 /로/A/폴더 -a -b 내가 내 코드의 상단에있는 것은 이것이다

:

while getopts ":ab" opt; do 
case $opt in 
    a) 
    variable=a 
    ;; 
    b)  
    variable=b 
    ;; 
    \?) 
    echo "invalid option -$OPTARG" 
    exit 0 
esac 
done 

echo "$variable was chosen" 

이제는/path/to/a/folder없이 스크립트를 호출하면 작동합니다 ... 어떻게 대신 사용할 수 있습니까?

덕분에 많은

+2

인수 * 뒤에 * 경로를 넣으십시오. –

+0

'/ path/to/a/folder'로 스크립트가하는 일은 무엇입니까? – anubhava

답변

1

당신이 MUST이 인수하기 전에 경로를 넣어 경우, 첫 번째 위치 인수를 팝하고, getopts가의 나머지를 떠날 수있는 shift command를 사용합니다.

# Call as ./myScript /path/to/a/folder -a -b 

path_argument="$1" 
shift # Shifts away one argument by default 

while getopts ":ab" opt; do 
case $opt in 
    a) 
    variable=a 
    ;; 
    b)  
    variable=b 
    ;; 
    \?) 
    echo "invalid option -$OPTARG" 
    exit 0 
esac 
done 

echo "$variable was chosen, path argument was $path_argument" 

더 많은 표준 대답은 언급 Etan로, 옵션 후에 비 - 옵션 인수를 넣어하는 것입니다. 내장 POSIX 옵션 구문 분석을 통해 스크립트의 일관성을 유지하므로이 스타일을 선호하십시오.

# Call as ./myScript -a -b /path/to/a/folder 

while getopts ":ab" opt; do 
case $opt in 
    a) 
    variable=a 
    ;; 
    b)  
    variable=b 
    ;; 
    \?) 
    echo "invalid option -$OPTARG" 
    exit 0 
esac 
done 
shift $((OPTIND - 1)) # shifts away every option argument, 
         # leaving your path as $1, and every 
         # positional argument as [email protected] 
path_argument="$1" 
echo "$variable was chosen, path argument was $path_argument" 
관련 문제