매개변수 목록이 너무 긴 문제에 대한 해결 방법

매개변수 목록이 너무 긴 문제에 대한 해결 방법

파일을 읽고, 파일 내용을 변수에 복사하고, 변수를 다른 명령에 인수로 전달하는 다음 쉘 스크립트가 있습니다.

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 파일이 작을 때 효과적입니다. 하지만 account.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그래도 문제가 발생하면 명령줄 인수가 아닌 표준 입력이나 파일을 통해 "피어"에 인수를 전달하는 방법을 찾아야 합니다 .

관련 정보