2013-11-28 3 views
0

이 두 스크립트는 configScript.shgenScript.sh입니다. 첫 번째 방법은 내가 원하는 방식으로 작동합니다. 올바른 값을 options.shecho에 추가합니다. 그러나 genScript.shoptions.sh에 현재 인수를 허용하고 올바른 echo을 출력하고 싶습니다. 이제는 genScript.sh을 실행하면 null이 반환되며 이유를 알 수 없습니다. Bash는 코드를 예상대로 소싱하지 않습니다.


#!/bin/bash -x 
#genScript.sh 
. options.sh 
OPTION=$1 
func2() 
{ 
    if [ "$OPTION" == one ] ; then 
     echo "Option one" 
    elif [ "$OPTION" == two ] ; then 
     echo "Option two" 
    else 
     echo "null" 
    fi 
} 
func2 

#!/bin/bash -x 
#configScript.sh 
func() 
{ 
echo " 
Choose 
1 - Option 1 
2 - Option 2 
" 
echo -n " Enter selection: " 
read select 
case $select in 
      1) 
      echo " Option 1 chosen" 
      . ./genScript.sh one 
      cat <<EOF>options.sh 
OPTION=$OPTION 
EOF 
      ;; 
      2) 
      echo " Option 2 chosen" 
      . ./genScript.sh two 
      cat <<EOF>options.sh 
OPTION=$OPTION 
EOF 
      ;; 
esac 
} 
func 

나는 OPTION=$1을 제거하여 내가 원하는 방식으로 작동 genScript.sh을 얻을 수 있었다. 내가 그렇게하면 genScript.shoptions.sh의 값을 받아들이고 오른쪽은 echo을 출력합니다. 하지만 OPTION=$1 configScript.sh이 작동을 멈추었을 때 options.sh에 새 값을 더 이상 업데이트하지 않습니다.

+0

'genScript.sh'에서'$ 1'을 반복 해 보았습니다. 나는 아마도 "one"과 "two"를 따옴표로 붙일 것이다. – John3136

+0

$ 1을 echo 할 때, 아무것도 반환하지 않지만'options.sh '의 값을 반환하는 방법을 모른다. ' – Benji

답변

1

문제는 genScript를 호출하는 방식입니다. 나는 당신이 명령 줄 인수로 genScript를 실행하고 options.sh에서 소싱하는 것과 마찬가지로 잘한다고 생각한다.

아래에는 genScript.sh가 변경되었습니다. 명령 행과 options.sh 모두에 값이있는 경우, 명령 행에 우선 순위를 부여합니다.

#!/bin/bash -x 
#genScript.sh 
OPTION="" 
. options.sh 
[ "$1" ] && OPTION=$1 
func2() 
{ 
    if [ "$OPTION" == one ] ; then 
     echo "Option one" 
    elif [ "$OPTION" == two ] ; then 
     echo "Option two" 
    else 
     echo "null" 
    fi 
} 
func2 
+0

굉장! 고맙습니다 – Benji

0

두 번째 스크립트와 첫 번째 스크립트에서 options.sh를 생성하고 두 번째 스크립트의 OPTION var에 기본값 OPTION을 추가하면 따옴표를두기 만하면됩니다.

#!/bin/bash -x 
#configScript.sh 
func() 
{ 
echo " 
Choose 
1 - Option 1 
2 - Option 2 
" 
echo -n " Enter selection: " 
read select 
case $select in 
      1) 
      echo " Option 1 chosen" 
      . ./genScript.sh one 
      cat <<EOF>options.sh 
OPTION="$OPTION" 
EOF 
      ;; 
      2) 
      echo " Option 2 chosen" 
      . ./genScript.sh two 
      cat <<EOF>options.sh 
OPTION="$OPTION" 
EOF 
      ;; 
esac 
} 
func 
가장 자극적 문제 중 하나입니다
#!/bin/bash -x 
#genScript.sh 
. options.sh 
OPTION=${1-$OPTION} 
func2() 
{ 
    if [ "$OPTION" == "one" ] ; then 
     echo "Option one" 
    elif [ "$OPTION" == "two" ] ; then 
     echo "Option two" 
    else 
     echo "null" 
    fi 
} 
func2 

. 나는 당신이 구문 강조와 함께 편집기를 사용하고 있는지 잘 모르지만, 당신이이 유형의 이슈를 쉽게 수행 할 수 있도록하는 것이 좋습니다.

+0

그것은 나를 위해 작동하지 않습니다. 'genScript.sh'는 쉘에서 실행할 때 여전히'null'을 반환합니다. – Benji

+0

GNU bash, 버전 4.1.2에서 테스트 중이며 ./configScript.sh를 실행 한 후 작동합니다. ** 1 ** 또는 ** 2 **를 입력하고 Enter 키를 누릅니다. –

+0

아, 처음에는 작동하지만 나중에 ./genScript.sh를 입력하면 작동하지 않습니다. 잠시만 기다려주십시오. –

관련 문제