CURL - 无效字符' \\ n'在字符串文字中

时间:2018-01-18 04:05:31

标签: windows bash shell curl ethereum

所以我写了一个简单的bash脚本,它接受明文消息,将其转换为十六进制,并对我的localhost上运行的geth客户端进行curl调用以对数据进行签名。我能够将明文消息转换为十六进制,但是当将转换后的十六进制变量作为输入发送到我的CURL命令时它给了我 -

jsonrpc":" 2.0""错误" {"代码": - 32600"消息":& #34;无效字符' \ n'在字符串文字"}}

以下是代码 -

#!/bin/bash

# grabbing day and month from current date
D=$(date)
DAY=$(date -d "$D" '+%d')
MONTH=$(date -d "$D" '+%m')
YEAR=$(date -d "$D" '+%Y')


echo "Day: $DAY"
echo "Month: $MONTH"
echo "Year: $YEAR"

# prepare todays JSON message for attestation

a="SH_$YEAR$MONTH$DAY"
b="_324019325_1_10_001_00_test"
filename=$a$b
hash="test hash"
addl_data="test data"
tag="test tag"

msg=$filename$tag$addl_data$hash
echo "Prepared Message is - $msg"


msg_hex_wn=$(xxd  -ps <<< "$msg")| tr -d '\040\011\012\015'
echo "Message in hex - $msg_hex_wn"
echo "\n"
echo $(xxd  -ps <<< "$msg")| tr -d '\040\011\012\015'


# Signing the message in hex
curl -X POST localhost:8545  -d "{\"jsonrpc\":\"2.0\",\"method\":\"eth_sign\",\"params\":[\"0x525c846b777d003048dbabd0f2dd677086839812\", \"$(xxd  -ps <<< "$msg")| tr -d '\040\011\012\015'\"],\"id\":5}" 





read

显然$(xxd -ps&lt;&lt;&lt;&lt;&lt;&#34; $ msg&#34;)部分应该归咎于这可能是\ n而解析器正在读取它\ n,当我尝试仅使用0x1234而不是$(xxd -ps&lt;&lt;&lt;&#34; $ msg&#34;)我能够得到响应,所以我在这里看到的是有一种方法来清理十六进制来自$(xxd -ps&lt;&lt;&lt;&#34; $ msg&#34;)命令的换行符和空格?或者有更好的方法将字符串转换为十六进制?

1 个答案:

答案 0 :(得分:1)

您的具体问题是您在命令替换之外将管道放到tr| tr yada yada需要进入$(xxd ...)右括号内。

最终值捕获到变量中并将其插入curl命令行可能会大大简化故障排除。

就其他方法而言,我可能会选择一个简单的单行

perl -pe 's/(.)/ sprintf("%02X", ord($1)) //ge' <<<"$msg"