配列にコンテナ名を割り当てようとしています。
配列に割り当てずに実行すると、コマンドは完全に実行されます。
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
または、スクリプト全体を別のファイル(リモートまたはローカル側)に配置し、そのファイルで実行します。