2017-10-16 1 views
1

bash 스크립트 myscript.sh이 있습니다. 예를 들어, diff과 같이 다른 스크립트, 명령 또는 내장 스크립트를 호출 할 수 있습니다. 나는 옵션을 myscript.sh에 전달하려고하는데, 그 중 일부는 diff으로 전달 될 것입니다.bash 스크립트에서 호출 된 스크립트, 명령 또는 기본 제공에 전달 된 옵션

나는이 getopt를 통해 옵션 문자열 optstring을 설정 한 다음

eval "diff ${optstring} ${file} ${TRG_DIR}/${filebase2}" 

는 지금까지이 일을 사용하는 것입니다,하지만이 문제에 인수를 전달하는 경향이 경우 나도 몰라 구현하는 방법 어쨌든, ...

더 좋은 방법이 있습니까?


내가 optstring를 설정하는 방법은

set -o errexit -o noclobber -o nounset -o pipefail 
params="$(getopt -o qy --long brief,side-by-side,suppress-common-lines --name "$0" -- "[email protected]")" 

if [ $? != 0 ] ; then echo "Failed parsing options." >&2 ; exit 1 ; fi 

echo params=$params 
echo [email protected] 

eval set -- "$params" 

optstring="" 
# These variables are likely not needed 
brief=false 
sbs=false 
scl=false 

#while false ; do 
while true ; do 
    case "$1" in 
     -q|--brief) 
      optstring=${optstring}" -q" 
      brief=true 
      echo "brief" 
      shift 
      ;; 
     -y|--side-by-side) 
      optstring=${optstring}" -y" 
      sbs=true 
      echo "side-by-side" 
      shift 
      ;; 
     --suppress-common-lines) 
      optstring=${optstring}" --suppress-common-lines" 
      scl=true 
      echo "suppress-common-lines" 
      shift 
      ;; 
     --) 
      shift 
      break 
      ;; 
     *) 
      echo "Not implemented: $1" >&2 
      exit 1 
      ;; 
    esac 
done 
echo optstring=${optstring} 

답변

2

배열을 사용하는 것입니다. 배열은 공백이있는 다중 단어 인수를 처리 할 수 ​​있습니다. 수행 옵션을 추가하려면

options=() 

: 빈 배열을 초기화

options+=(--suppress-common-lines) 

당신이 diff 전화를 그냥 정상적으로를 호출 할 때 다음 마지막으로 당신이 eval 제거 할 수 있습니다. 언 바운드 variable` :

diff "${options[@]}" "$file" "$TRG_DIR/$filebase2" 
+0

내가 어떤 옵션이 없을 때, 나는 오류'옵션 [@]를 얻을 것을 발견 : 경우에 변수 확장을 모두 인용하고 있는지 확인 그들은 공백이 있습니다. 어떻게 제거 할 수 있습니까? –

+0

https://stackoverflow.com/questions/7577052/bash-empty-array-expansion-with-set-u가 문제를 해결합니다. –

관련 문제