通过 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

在双引号内,命令替换将在本地端处理,并且本地 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

或者将整个脚本放在一个单独的文件中(在远程或本地端),然后从该文件运行。

相关内容