4

SMSゲートウェイにリクエストを送信しようとしています。ここで、送信されるSMSに改行を入れたいと思います。

これまでのところ、私はこれに到達しました:

/usr/local/bin/curl -G --data-urlencode "text=*****centreon Notification *****\n\nType:$NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\nDate/Time: $DATE$" "http://192.168.11.248:13013/cgi-bin/sendsms?username=user&password=password&from=12345678&to=87654321"

ただし、\nSMSにすべてのが含まれているため、これは機能しません。新しい行があるはずです。

動作するPHPスクリプトがありますが、\nPHPスクリプトを呼び出すことができないため、cURLが機能するワンライナーを使用してこれを行う必要があります。

4

3 に答える 3

5

Bashでは、引用符で囲まれた文字列に改行を簡単に埋め込むことができます。

/usr/local/bin/curl -G --data-urlencode "text=*****centreon Notification *****

Type:$NOTIFICATIONTYPE$
Host: $HOSTNAME$
State: $HOSTSTATE$
Address: $HOSTADDRESS$
Info: $HOSTOUTPUT$
Date/Time: $DATE$" "http://192.168.11.248:13013/cgi-bin/sendsms?username=userpassword=password&from=12345678&to=87654321"

末尾のドル記号は何を達成することになっていますか?

必要に応じて、Bashには、のように文字列でエスケープするための構文があります$'Hello\nworld'。冒頭の見積もりの​​前にあるドル記号に注意してください。

于 2012-08-13T10:04:10.393 に答える
1

$''エスケープシーケンスを使用したスタイル引用符、またはリテラルの改行を使用した他の引用符タイプを使用して、改行を引数に貼り付けることができます。私はこれを整理したほうがいいです。それは1つの非常に長い「ワンライナー」です。

declare -a a=(
    $'text=*****centreon Notification *****\n'
    "Type: $NOTIFICATIONTYPE"
    "Host: $HOSTNAME"
    "State: $HOSTSTATE"
    "Address: $HOSTADDRESS"
    "Info: $HOSTOUTPUT"
    "Date/Time: $DATE"
)

url=http://192.168.11.248:13013/cgi-bin/sendsms?username=user&password=password&from=12345678&to=87654321

/usr/local/bin/curl -G --data-urlencode "$(printf '%s$\n' "${a[@]}")" "$url"

余談ですが、kshは、を介してネイティブにURLエンコードをサポートするprintf '%(url)q' '...data...'ようになりました。この場合、curlはまったく必要ない場合があります。

于 2012-08-13T11:32:04.467 に答える
0

Nagiosはcommand_lineパラメーターで複数行の値を受け入れないため、次のように実行できます。

/ usr / local / bin / curl "http://192.168.11.248:13013/cgi-bin/sendsms?username=userpassword=password&from=12345678&to=87654321&text=%2A%2A%2A%2A%2Acentreon%20Notification%20% 2A%2A%2A%2A%2A%0A%0AType:%20 $ NOTIFICATIONTYPE $%0AHost:%20 $ HOSTNAME $%0AState:%20 $ HOSTSTATE $%0AAddress:%20 $ HOSTADDRESS $%0AInfo:%20 $ HOSTOUTPUT $%0ADate / Time:%20 $ DATE $ "
于 2014-03-17T20:14:45.610 に答える