簡體   English   中英

ssh和環境變量遠程和本地

[英]ssh and environment variables remote and local

我需要在同一個遠程ssh命令中使用遠程變量和局部變量

export CASSANDRA_DIR=/opt/cassandra

ssh root@sdi-prod-02 <<\EOF
  export READ=$(grep IPADDR /etc/sysconfig/network-scripts/ifcfg-eth0 |awk -F= '{print $2}')
  echo "listen_address: $READ" to directory "$CASSANDRA_DIR"
EOF

$ SC變量工作得很好,而CASSANDRA_DIR不工作。 以下適用於CASSANDRA_DIR

ssh root@sdi-prod-02 echo "directory=$CASSANDRA_DIR"

謝謝,迪恩

什么應該在本地擴展,保持sigil $原樣,像$foobar

你想遠程擴展什么,你可以使用反斜杠: \\$foobar

默認情況下, here-docs會擴展變量。

防爆。

cat<< EOF
$UID
EOF

為避免在here-doc中擴展,您可以使用以下格式:

cat<< 'EOF'
$variable_that_will_not_been_expanded
EOF

或者你的:

cat<< \EOF
$variable_that_will_not_been_expanded
EOF

兩者都有效。

如果您不想使用here-doc,可以這樣做:

export CASSANDRA_DIR=/opt/cassandra

ssh root@sdi-prod-02 "
   export READ=\$(grep IPADDR /etc/sysconfig/network-scripts/ifcfg-eth0 |awk -F= \'{print \$2}\')
   echo \"listen_address: \$READ\" to directory \"$CASSANDRA_DIR\"
"

因此,我的最終結果非常有效(請注意我將EOF改為EOF而不是!!!!!然后轉義遠程變量

export CASSANDRA_DIR=/opt/cassandra

ssh root@sdi-prod-02 <<EOF
  export READ=$(grep IPADDR /etc/sysconfig/network-scripts/ifcfg-eth0 |awk -F= '{print $2}')
  echo "listen_address: \$READ to directory $CASSANDRA_DIR"
EOF

一切都很好,因為READ是遠程生成的,而CASSANDRA_DIR是我原始機器上的var。

院長

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM