概述
今天遇到一个问题,场景是这样的:我想在程序异常退出之后,将最后一行日志通过curl发送到报警服务器,我的脚本是这么写的:
log=$(tail -n 1 server.log)
curl -X POST -H "Content-Type: application/json" -d "{"text":"退出前日志:$(echo $log)"}" https://xxx.xxx.xxx
而我的日志一般是长这样的:
log info 00:00:00 "event":"payment"
json里替换变量时,会直接将字符串变量替换进去,也就是说,这条命令实际执行的是这个:
log=$(tail -n 1 server.log)
curl -X POST -H "Content-Type: application/json" -d "{"text":"退出前日志:log info 00:00:00 "event":"payment""}" https://xxx.xxx.xxx
这时问题来了,字符串里有引号,且没有转义,所以json的内容实际到这里就停了:
"{"text":"退出前日志:log info 00:00:00 "
这样一个json发给server,server肯定是拒绝的。。。
那么这个问题该怎么解决呢,其实只需要将字符串变量中的引号转义一下就好了,也就是这样:
" -> "
所以我们要做的就是,把这个字符串变量中所有的引号替换掉就好了,说到替换,那自然就想到了sed,是的,就是用sed,话不多说,直接上修改后的脚本:
log=$(tail -n 1 server.log | sed 's/"/\"/g')
是的,只需要这样一改,发出去就欧克了,简单吧,哈哈~
最后
以上就是仁爱硬币为你收集整理的curl 发送带引号的字符串变量的全部内容,希望文章能够帮你解决curl 发送带引号的字符串变量所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复