SSH를 통한 배열 할당의 문자열 보간

SSH를 통한 배열 할당의 문자열 보간

배열에 컨테이너 이름을 할당하려고 합니다.

배열에 할당하지 않고 실행하면 명령이 완벽하게 실행됩니다.

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

또는 전체 스크립트를 별도의 파일(원격 또는 로컬 측)에 넣고 해당 파일에서 실행하십시오.

관련 정보