SSH内で条件が失敗した場合

SSH内で条件が失敗した場合

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一方、変数はローカルで定義されているので、エスケープしたくありません。

おすすめ記事