Bash

使用“命令”而不是“命令”的腳本中的 ssh

  • March 12, 2015

我正在嘗試通過 simples 腳本在我們集群的各個節點上自動執行命令。我已經看到我可以執行:

#!/bin/bash
echo "Machine: "$HOSTNAME;
ssh machine2 'echo Machine: $HOSTNAME;'
echo "Machine: "$HOSTNAME;

我得到了預期的結果:

Machine: machine1
Machine: machine2
Machine: machine1

但是,我想執行需要變數的更複雜的命令,所以我需要"使用. 但是,如果我這樣做,ssh 似乎不起作用:'``ssh

#!/bin/bash
echo "Machine: "$HOSTNAME;
ssh machine2 "echo Machine: $HOSTNAME;"
echo "Machine: "$HOSTNAME;

返回:

Machine: machine1
Machine: machine1
Machine: machine1

我已經看到了其他問題,這些問題專門說明了使用 以這種方式執行命令",所以我對這裡發生的事情感到茫然。

我認為您要問的是如何將在本地評估的變數與需要遠端評估的變數混合和匹配。

一種選擇是為要遠端處理的操作編寫一個腳本,從而封裝對局部變數的任何引用,以便本地主機的引號無法看到它們來擴展它們。

一個非常短的片段的另一個選擇是混合你的報價,像這樣:

FRUIT=apples
ssh machine2 "echo Eating $FRUIT "'on $HOSTNAME'

雙引號段中的變數將在本地計算(在ssh執行之前)。單引號段中的所有內容都將被視為文字。將連接兩個帶引號的字元串以創建字元串echo Eating apples on $HOSTNAME,並將結果作為文本傳遞以進行遠端評估。

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