参数列表太长的解决方案

参数列表太长的解决方案

我有下面的 shell 脚本,它读取一个文件,将文件的内容复制到一个变量并将该变量作为参数传递给另一个命令。

declare -a arr=()
while IFS= read -r var
do
  arr+=( $var )
done < "accounts.json"
args=''
for j in "${arr[@]}"
 do
   args="$args $j"
 done
 peer chaincode invoke -n cc -C channel1 -c '{"Args":["InitLedgerAdvanced",'"\"$args\""']}'

当 account.json 文件较小时,此方法非常有效。但当accounts.json 的大小太大时,我收到一条错误消息“参数列表太长”。我尝试过 xargs 但没有成功。

编辑1:

下面是只有两行的示例 json 文件

[{"accountID":"C682227132","accountStatus":"1"},
{"accountID":"C800427392","accountStatus":"1"}]

下面是对等命令与实际数据的样子

peer chaincode invoke -n cc -C channel1 -c '{"Args":["InitLedgerAdvanced","[{"accountID":"C682227132","accountStatus":"1"},
{"accountID":"C800427392","accountStatus":"1"}]"]}'

答案1

可能工作

# slurp the accounts file into a variable
accounts=$(< accounts.json)

# create the json, escaping the accounts quotes along the way
printf -v json '{"Args":["InitLedgerAdvanced","%s"]}' "${accounts//\"/\\\"}"

# and invoke the command
peer chaincode invoke -n cc -C channel1 -c "$json"

如果这仍然给您带来麻烦,您必须找到一种方法-c通过标准输入或文件将参数传递给“peer”,而不是作为命令行参数。

相关内容