![변수, 따옴표 및 작은 따옴표가 포함된 원격 SSH 명령](https://linux55.com/image/119497/%EB%B3%80%EC%88%98%2C%20%EB%94%B0%EC%98%B4%ED%91%9C%20%EB%B0%8F%20%EC%9E%91%EC%9D%80%20%EB%94%B0%EC%98%B4%ED%91%9C%EA%B0%80%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%EC%9B%90%EA%B2%A9%20SSH%20%EB%AA%85%EB%A0%B9.png)
쉘 스크립트에 선언된 변수를 사용하여 원격 MongoDB 서버에서 명령을 실행해야 합니다.
주문하다:
ssh [email protected] "mongo mydb --host 10.1.1.1 --port 27017 -u user -p password --authenticationDatabase admin --eval 'db.mycollection.update({}, {$push: {'"$ENTITY"': NumberInt('"$CODE"')}})' --quiet"
쉘 스크립트 외부에서 명령을 사용하고 변수를 바꾸면 bash -c 구문 오류가 발생합니다. 예:
ssh [email protected] "mongo mydb --host 10.1.1.1 --port 27017 -u user -p password --authenticationDatabase admin --eval 'db.mycollection.update({}, {$push: {foo: NumberInt(123)}})' --quiet"
bash: -c: line 0: syntax error near unexpected token `('
지금 일해요!해결책:
DBUPDATE="db.mycollection.update({}, {\$push: {${ENTITY}: NumberInt(${CODE})}})"
ssh [email protected] mongo mydb --host 10.1.1.1 --port 27017 -u user -p password --authenticationDatabase admin --eval "'$DBUPDATE'" --quiet
답변1
ssh [email protected] 'mongo mydb --host 10.1.1.1 --port 27017 -u user -p password --authenticationDatabase admin --eval "db.mycollection.update({}, {$push: {'"$ENTITY"': NumberInt('"$CODE"')}})" --quiet'
시작과 끝에서 큰따옴표를 작은따옴표로 바꾸고 --eval
입력 내용을 큰따옴표로 묶었습니다.