Linux
參數列表過長的解決方法
我有下面的 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”,而不是作為命令行參數。