0

bashスクリプト「test.sh」があり、使用したいパラメーターの1つは--no-emailです。

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
4

1 に答える 1

1

これをサポートするようにスクリプトを変更できない場合test.shでも、この構文を使用して構成ファイルからパラメーターを取得できます。

test.sh $(<test.cnf)

この仮定が正しくない場合、つまり、test.shこれをサポートするためにそれ自体を変更したい場合は、内部で何が起こるかをより具体的にする必要がありますtest.sh

編集: の内容がtest.sh質問に追加されました。そこから始めて、最も簡単なことは次のようになります。

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

しかし、あなたは他にもたくさんのパラメーターがあると書いています。for each を実行するの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"
于 2012-11-17T12:38:02.593 に答える