2012-08-13 148 views
3

我想發送一個請求到我們的短信網關,我想在發送的短信中放入一些換行符。urlencode與cURL bash與換行

到目前爲止,我得到這個:

/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" 

然而,這是不行的,因爲我得到的所有\n「在我的短信,那裏應該是一個新的生產線。

我有一個PHP腳本,其中\n的作品,但因爲我不能調用PHP腳本,我必須用一個oneliner做到這一點,其中cURL發揮作用。

回答

4

你可以在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'。注意開盤價之前的美元符號。

+0

尾隨美元符號的Nagios/Centreon如何處理的參數傳遞到命令。在bash中嵌入換行符非常完美 - 謝謝! – 2012-08-13 10:39:00

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...'本身,其中捲曲可能根本不被需要的情況下。

+0

嗯,你的腳本看起來不錯,儘管我不能用這麼長的一個(有多個操作符),因爲它必須進入一個nagios配置文件。 – 2012-08-13 15:07:21

+0

@FrederikNielsen嗯,或者是好的。這將更多地用作更大的Bash腳本的一部分。 – ormaaj 2012-08-13 15:17:17

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$" 
+0

其實它不是一個好的解決方案,因爲通過這種方式,nagios宏($$之間的變量)不會被URL編碼。 – ZsZs 2014-03-18 07:55:11

+0

我已經把一個包裝腳本在這裏http://zszsit.blogspot.com/2014/03/send-sms-from-nagiosicinga-through.html 它適用於nagios/icinga和kannel – ZsZs 2014-03-18 14:46:46