Bash는 SSH를 통한 rsync로 인해 실행 중인지 어떻게 확인합니까?

Bash는 SSH를 통한 rsync로 인해 실행 중인지 어떻게 확인합니까?

다음을 구별하려면 Bash init 스크립트가 필요합니다.

  • ssh me@host /some/complicated/operation와 같은 이름 이 호출되었습니다 .
  • 이렇게 불린다rsync -e ssh /src me@host:/dest

첫 번째 경우에는 많은 초기화를 실행하고 싶지만 두 번째 경우에는 항상 건너뛰고 싶습니다. 이러한 경우를 구별하기 위해 어떤 환경 또는 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 연결에 의해 생성된 셸은 이 명령과 일치하지 않으므로 정상적으로 작동합니다.

답변2

대화형 세션이 실행 중인지 확인하기 위한 솔루션을 찾고 있다면 다음이 도움이 될 수 있습니다.

if [[ $- == *i* ]]
then
  echo "You are in interactive mode
else
  echo "Non-Interactive session"
fi

관련 정보