2012-11-17 25 views
0

나는 bash 스크립트 "test.sh"를 가지고 있는데 사용하고자하는 하나의 매개 변수는 --no-email입니다.bash 스크립트에 변수 전달하기

test.sh --no-email을 실행하면 예상대로 작동하고 전자 메일 상태 보고서를받지 못합니다.

그러나 실제로 실행하고 싶은 것은 "test.sh test.cnf"입니다. 여기서 --no-email 매개 변수는 다른 매개 변수의로드와 함께 test.cnf 파일에 저장됩니다. 나는이 일을하도록 내 삶을 위축시킬 수 없다. 아마도 나는 완전히 어리 석고 이해하지 못하고 있습니까?

많은 감사

echo $*|grep -se '--no-email'&>/dev/null 
SEND_MAIL=`echo $?` 

echo -e "DEBUG: \$*=$*" 

if [ ! "$SEND_MAIL" == "0" ]; then 
    echo 'Mail would have been sent!' 
else 
    echo 'NO MAIL WOULD HAVE BEEN SENT!' 
fi 

답변

1

이를 지원하기 위해 스크립트 test.sh을 수정할 수없는 경우 여전히 설정 파일에서 매개 변수를 가져 오기 위해이 구문을 사용할 수 있습니다 :이 가정이 사실이 아닌 경우

test.sh $(<test.cnf) 

을 즉, test.sh을 수정하여이 문제를 해결하려면 test.sh 내부에서 일어나는 일에 대해보다 구체적으로 설명해야합니다.

편집 : 이제 test.sh의 내용이 질문에 추가되었습니다. 할이 가장 간단한 일을 시작하면 다음과 같이 될 것이다 :

grep -sqe '--no-email' "$*" 
SEND_MAIL=$? 

그러나 당신은 당신이 다른 PARAMATERS의 무리를 썼다. 각각에 대해 grep을 수행하는 것은 불편할 수 있습니다. 이 경우이 같은 CNF 파일의 말씀을 통해 루프 수 :

#!/bin/bash 

while read line; do 
    for word in $line; do 
     echo "examing $word" 
     case "$word" in 
     --no-email) 
      SEND_MAIL=0 
     ;; 
     --no-foo) 
      NO_FOO=0 
     ;; 
     *) 
      echo 1>&2 "WARNING: Unknown parameter: $word" 
     ;; 
    esac 
    done 
done < "$1" 
+0

test.sh – user1183367

+0

user1183367 @ 내부에서 무슨 일을 표시하도록 업데이트 : 내 대답 업데이트 –

관련 문제