一、背景
shell脚本中读取文件,换行输出,然后把数据传递给后端处理
二、解决过程
请看代码:
file=`cat ./test.txt`
for line in $file
do
echo $line
done > ./test2.txt
a=`cat ./test2.txt`
curl -H "Content-Type: application/json" -X POST -d '{"param":"'"$a"'"}' "http url path"
注:引用变量的引用"'"$a"'"
,否则少打个单引号或者双引号可能会导致后端拿不到数据
功能:读取text.txt文件,按列输出到text2.txt文件,然后把该数据以post json的形式传递给后端做处理。
但是脚本执行后会报以下错误:
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value
at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 1215] (through reference chain: com.techwolf.dac.push.admin.param.BossHiParam["param"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:390)
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:349)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1822)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:404)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:195)
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4593)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3601)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:380)
... 58 common frames omitted
报错原因:字符串中包含换行符“\n”
解决办法:去掉"\n",以",“代替,在后端逻辑处理中把”,“替换成”\n",
例如代码中的echo -n $line,
是不换行加英文逗号输出,a=${a%*,}
是去掉整个字符串中最后一个英文逗号,curl -H "Content-Type: application/json" -X POST -d '{"param":"'"$a"'"}' "http url path"
是以post json的形式调http接口
file=`cat ./test.txt`
for line in $file
do
echo -n $line,
done > ./test2.txt
a=`cat ./test2.txt`
a=${a%*,}
curl -H "Content-Type: application/json" -X POST -d '{"param":"'"$a"'"}' "http url path"
是否还有其他的解决方法:
比如在shell脚本中直接将换行字符转义,但是目前笔者没有找到解决方案,如果感兴趣的童鞋可以在评论区留言!