Bash
通過 SSH 分配數組中的字元串插值
我正在嘗試將容器名稱分配給數組。
當我在沒有分配給數組的情況下執行它時,該命令可以完美執行:
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
或者通過將整個腳本放在一個單獨的文件中(在遠端或本地端),並從中執行。