SSHを介してリモートコンピュータ(Ubuntu)に接続し、その中で小さなスクリプトを実行しようとしています。スクリプトは次のとおりです。
myfunction()
{
input=$1
count=$2
ssh ubuntu@ip <<EOF
if [ $input = "comment" ];then
TotalCount=$count
echo "TotalCount is $TotalCount"
else
echo "do something"
fi
EOF
}
myfunction comment 2
SSHを介してサーバーに接続しますが、スペースで印刷されます。
出力:TotalCountは次のとおりです。
リモートホストで実行されているので(TotalCount = \ $ count)変数をエスケープしようとしています。しかし成功はありません。
ベストアンサー1
解決策
この試み:
myfunction()
{
input=$1
count=$2
ssh user@host <<EOF
if [ $input = "comment" ];then
TotalCount=$count
echo "TotalCount is \$TotalCount"
else
echo "do something"
fi
EOF
}
myfunction comment 2
ローカルに拡張されるのを防ぐためにバックスラッシュを追加しました\$TotalCount
。
説明する
TotalCount
リモートで定義された変数をエスケープしようとしています。ローカルで評価すると、$TotalCount
おそらく空の文字列として評価されるため、出力が表示されない理由を説明します。count
一方、変数はローカルで定義されているので、エスケープしたくありません。