次のスクリプトがあります。
ssh ip@host /bin/bash << EOF
hostname # Print the remote hostname
A=`hostname`
echo \${A} # Print the local hostname
EOF
リモートサーバーから値を取得し、スクリプト内の変数として使用したいと思います(この場合はhostname
実際には別のものが必要です)。
変数に値を割り当てるときは、常にリモート値ではなくローカル値を取得してください。何が問題なのでしょうか?アドバイスしてください。
ベストアンサー1
コマンドの置き換え
`hostname`
コマンドは、リモートサーバーに渡される前に、ここの(引用されていない)文書で評価されます。リモートサーバーで評価するには、変数の置換を避けるのと同じ方法でエスケープする必要があります。\${A}
ssh ip@host /bin/bash << EOF
hostname
A=\`hostname\`
echo \${A}
EOF
または(より良い方法は、廃止された逆引用符形式のコマンドの置き換えを置き換えることです)
ssh ip@host /bin/bash << EOF
hostname
A=\$(hostname)
echo \${A}
EOF
または(好ましくは - あなたが望んでいないようだからどの基本拡張)、heredoc自体を引用します。
ssh ip@host /bin/bash << 'EOF'
hostname
A=$(hostname)
echo ${A}
EOF