Bash

通過 SSH 分配數組中的字元串插值

  • September 17, 2021

我正在嘗試將容器名稱分配給數組。

當我在沒有分配給數組的情況下執行它時,該命令可以完美執行:

ARR=docker network inspect --format '{{ range $key, $value := .Containers }}{{ printf "%s\n" $value.Name}}{{ end }}' some_network $$ echo $ARR

我想做同樣的事情,但通過 SSH:

ssh root@68.183.74.135 "
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

我想原因在於字元串插值或轉義',你能給出任何建議嗎?

在雙引號內,命令替換將在本地端處理,本地 shell 將解析內部的引用。

如果你想在遙控器上執行它,你需要類似的東西

ssh root@68.183.74.135 '
 ARR=( $(docker network inspect --format '\''{{ range $key, $value := .Containers }}{{ printf "%s\n" $value.Name}}{{ end }}'\'' some_network) ) && echo $ARR
'

或者您可以通過 stdin 提供命令來避免引用地獄:

ssh root@68.183.74.135 <<'EOF'

ARR=( $(docker network inspect --format '{{ range $key, $value := .Containers }}{{ printf "%s\n" $value.Name}}{{ end }}' some_network) ) && echo $ARR
EOF

或者通過將整個腳本放在一個單獨的文件中(在遠端或本地端),並從中執行。

引用自:https://unix.stackexchange.com/questions/668806