Linux

參數列表過長的解決方法

  • March 28, 2019

我有下面的 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\""']}'

當 accounts.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"}]"]}'

可能有效

# 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”,而不是作為命令行參數。

引用自:https://unix.stackexchange.com/questions/509300