파일을 읽고, 파일 내용을 변수에 복사하고, 변수를 다른 명령에 인수로 전달하는 다음 쉘 스크립트가 있습니다.
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
그래도 문제가 발생하면 명령줄 인수가 아닌 표준 입력이나 파일을 통해 "피어"에 인수를 전달하는 방법을 찾아야 합니다 .