CURL - 字符串文本中的无效字符“”



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

jsonrpc":"2.0","error":{"code":-32600,"message":"字符串文字中的无效字符 ''"}}

以下是代码 -

#!/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 '40111215'
echo "Message in hex - $msg_hex_wn"
echo "n"
echo $(xxd  -ps <<< "$msg")| tr -d '40111215'

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


read

显然,$(xxd -ps <<<"$msg"(部分在这里应该受到指责,它可能具有并且解析器将其读取为,当我尝试仅使用0x1234而不是$(xxd -ps<<<"$msg"(时,我能够得到响应,所以我在这里看到的是有没有办法从$(xxd -ps<<<"$msg"(命令中清除换行符和空格的十六进制?或者有更好的方法可以将字符串转换为十六进制?

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

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

就其他方法而言,我可能会使用简单的单行

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

最新更新