シェルスクリプトのsshブロックの環境変数

シェルスクリプトのsshブロックの環境変数

私は次の機能を持っています:

GetHostName () {
NODE01_CHECK=`cat /etc/hosts | grep -w "node01" | awk '{print $1}'`
NODE02_CHECK=`cat /etc/hosts | grep -w "node02" | awk '{print $1}'`

IS_NODE1=`ifconfig -a | grep -w $NODE01_CHECK`
IS_NODE2=`ifconfig -a | grep -w $NODE02_CHECK`

if [[ ! -z $IS_NODE1 ]]; then
    echo "This is NODE 1"
fi

if [[ ! -z $IS_NODE2 ]]; then
    echo "This is Node 2"
fi

}

スクリプトは、クラスタの一部である2つのノードのうちの1つに特定のIPが設定されているかどうかを識別します。ローカルではうまく機能しますが、クラスタVIPのみを知っているサーバーでリモートで実行する必要があります。目標は、いくつかのファイルを2つのノードに転送することです。

だから私が実行したとき:

scp -r /tmp/files CLUST_VIP 
ssh CLUST_VIP <<EOF

        NODE01_CHECK=`cat /etc/hosts | grep -w "node01" | awk '{print $1}'`
        NODE02_CHECK=`cat /etc/hosts | grep -w "node02" | awk '{print $1}'`

        IS_NODE1=`ifconfig -a | grep -w $NODE01_CHECK`
        IS_NODE2=`ifconfig -a | grep -w $NODE02_CHECK`

        if [[ ! -z $IS_NODE1 ]]; then
               scp -r /tmp/files node02
        fi

        if [[ ! -z $IS_NODE2 ]]; then
               scp -r /tmp/files node01
        fi

  EOF

ただし、sshブロック内で同じコマンドを実行すると、次のメッセージが表示されます。

Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
Pseudo-terminal will not be allocated because stdin is not a terminal.

ssh -t上記のエラーを使用して削除してみましたが、grep環境変数が機能していないようです。

SSHブロックを介して環境変数を使用する方法はありますか?

ベストアンサー1

man bash:

この文書の形式は次のとおりです。

          <<[-]word
                  here-document
          delimiter

パラメーターおよび変数拡張、コマンド置換、算術拡張、またはパス名拡張は実行されません。言葉。その中に文字があれば言葉引用符が付いている場合、区切り文字は引用符を削除した単語の結果であり、この文書の行は拡張されません。 もし言葉 引用符がない場合、ここにあるドキュメントのすべての行はパラメータ拡張、コマンド置換、および算術拡張を受け、文字シーケンス\ <newline>は無視され、\は\、$、および `文字を引用するために使用する必要があります。

おすすめ記事