BashはSSHを介してrsyncのために実行されているかどうかを確認しますか?

BashはSSHを介してrsyncのために実行されているかどうかを確認しますか?

以下を区別するには、Bash initスクリプトが必要です。

  • ssh me@host /some/complicated/operationのような名前が呼び出されました。
  • こう呼ばれるrsync -e ssh /src me@host:/dest

最初のケースでは多くの初期化を実行したいのですが、2番目のケースでは常にスキップしたいと思います。これらのケースを区別するためにどの環境またはBash変数を使用できますか?

(注:これは自分で答えた質問です。)

ベストアンサー1

上記のように(他の接続オプションなしで)sshを介してrsyncを呼び出すと、リモートsshdは次のようにサブプロセスを作成します(リモートホストのデフォルトシェルがbashであると仮定)。

bash -c rsync --server [-options] [--long-options] ...

シェルはinitファイルのソースなので、initファイルでシェル変数を使用できます

BASH_EXECUTION_STRING
      The command argument to the -c invocation option.

このように:

if [[ "$BASH_EXECUTION_STRING" == rsync\ --server\ * ]]; then return; fi

通常の(rsync以外の)SSH接続によって生成されたシェルは、このコマンドと一致しないため、正常に機能します。

おすすめ記事