1

編集:

私の主な問題は、FOR ループの反復ごとに、リモート ホストで「単語」が空になっていることに対処しているようです。COLORS 変数は、エコーすると問題ないように見えます。4 つの色すべてが表示されます。

次のように、ssh経由で呼び出されるFORループを含むbashスクリプトがあります。

ssh user@host02 <<EOF

COLORS=RED GREEN WHITE ORANGE

for word in $COLORS; do
 echo $word
done

exit
EOF

ただし、私の出力は次のようになります。

ORANGE
ORANGE
ORANGE
ORANGE

FOR ループは、COLORS 変数内のスペースで区切られた 4 つの引数を識別します。これは、ループして 4 回エコーするためですが、最後の引数である ORANGE のみが表示されます。各引数がエコーされるように何を変更できますか?

4

4 に答える 4

4

$COLORSヒアドキュメントの変数と$word変数を拡張から保護する必要があります。これらはリモート システムに送信される前にローカル システムで展開されており、ローカル環境には現在 と に相当するものが含まれていますCOLORS="RED GREEN WHITE ORANGE"word=ORANGEおそらく、小さなスクリプトレットをリモートで実行する前にローカルでテストしたためです。

必要なことを達成するには、いくつかの方法があります。おそらく最もきれいなのはこれです:

ssh user@host02 <<'EOF'
....
EOF

EOF導入行の一重引用符に注意してください。または、ヒアドキュメント仕様をそのままに$して、スクリプト内の記号をエスケープすることもできます。

ssh user@host02 <<EOF
....
for word in \$COLORS; do
  echo \$word
done
EOF

これにより、ローカル展開からエスケープする特定の変数のみが保護され、ローカルで展開したい変数とリモート エンドで展開したい変数がある場合に役立ちます。

于 2013-06-11T14:23:37.820 に答える
0

この時点で色の周りに "" を入れてください。色変数 = オレンジ色であることがわかります。forループが良いので、それは私の推測です。

于 2013-06-11T13:59:20.350 に答える
0
于 2013-06-11T14:28:51.247 に答える