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"

但是,这不起作用,因为我\n在我的短信中得到了所有的 ',应该有一个新行。

我有一个可以\n运行的 PHP 脚本,但由于我不能调用 PHP 脚本,所以我必须使用一个单行器来执行此操作,其中 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

您可以使用$''带有转义序列的 -style 引号或带有文字换行符的其他引号类型将换行符添加到参数中。不过,我会更好地组织这个。那是一个长的“单线”。

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 $%0AD日期/时间:%20$DATE$"
于 2014-03-17T20:14:45.610 回答