我正在尝试将容器名称分配给数组。
当我运行它而不分配给数组时,该命令完美运行:
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
在双引号内,命令替换将在本地端处理,并且本地 shell 将解析内部的引用。
如果你想在远程运行它,你需要类似的东西
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
或者将整个脚本放在一个单独的文件中(在远程或本地端),然后从该文件运行。