sshはスクリプトで "command"の代わりに "command"を使用します。

sshはスクリプトで

簡単なスクリプトを使用して、クラスタ内のさまざまなノードでコマンドの実行を自動化したいと思います。私は実行できることを確認しました。

#!/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

私は見たその他の問題runコマンドをこのように使用するようにはっきりと出ているので、"ここで何が起こっているのか混乱しています。

ベストアンサー1

あなたが要求するのは、ローカルに評価される変数とリモートで評価されるべき変数を混在させて一致させる方法だと思います。

1つのオプションは、リモート操作用のスクリプトを作成してローカル変数への参照をカプセル化して、ローカルホストの引用符が拡張されていることを確認できないようにすることです。

非常に短いフラグメントの場合、別のオプションは次のように引用符を混在させることです。

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

ssh二重引用符で囲まれたセクション内の変数は、ローカルで(実行前)評価されます。一重引用符で囲まれた段落内のすべての内容はリテラルとして扱われます。引用符で囲まれた2つの文字列を連結して文字列を生成し、echo Eating apples on $HOSTNAME結果をリモートで評価できるようにリテラルに渡します。

おすすめ記事