2012-08-13 129 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