以下を区別するには、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接続によって生成されたシェルは、このコマンドと一致しないため、正常に機能します。