![SSH를 통한 배열 할당의 문자열 보간](https://linux55.com/image/195602/SSH%EB%A5%BC%20%ED%86%B5%ED%95%9C%20%EB%B0%B0%EC%97%B4%20%ED%95%A0%EB%8B%B9%EC%9D%98%20%EB%AC%B8%EC%9E%90%EC%97%B4%20%EB%B3%B4%EA%B0%84.png)
배열에 컨테이너 이름을 할당하려고 합니다.
배열에 할당하지 않고 실행하면 명령이 완벽하게 실행됩니다.
ARR=docker network inspect --format '{{ range $key, $value := .Containers }}{{ printf "%s\n" $value.Name}}{{ end }}' some_network $$ echo $ARR
나는 똑같은 일을 하고 싶지만 SSH를 통해:
ssh [email protected] "
ARR=( $(docker network inspect --format '"'{{ range $key, $value := .Containers }}{{ printf "%s\n" $value.Name}}{{ end }}'"' some_network) ) && echo $ARR
"
그러나 그것은 불평한다:
Template parsing error: template: :1: unexpected unclosed action in command
그 이유는 문자열 보간이나 탈출 때문인 것 같습니다 '
. 누구에게나 조언을 해줄 수 있습니까?
답변1
큰따옴표 내에서 명령 대체는 로컬 측에서 처리되고 로컬 쉘은 내부의 따옴표를 확인합니다.
원격으로 실행하려면 다음과 같은 것이 필요합니다.
ssh [email protected] '
ARR=( $(docker network inspect --format '\''{{ range $key, $value := .Containers }}{{ printf "%s\n" $value.Name}}{{ end }}'\'' some_network) ) && echo $ARR
'
또는 stdin을 통해 명령을 실행하여 참조 지옥을 피할 수 있습니다.
ssh [email protected] <<'EOF'
ARR=( $(docker network inspect --format '{{ range $key, $value := .Containers }}{{ printf "%s\n" $value.Name}}{{ end }}' some_network) ) && echo $ARR
EOF
또는 전체 스크립트를 별도의 파일(원격 또는 로컬 측)에 넣고 해당 파일에서 실행하십시오.