![Bash는 SSH를 통한 rsync로 인해 실행 중인지 어떻게 확인합니까?](https://linux55.com/image/84596/Bash%EB%8A%94%20SSH%EB%A5%BC%20%ED%86%B5%ED%95%9C%20rsync%EB%A1%9C%20%EC%9D%B8%ED%95%B4%20%EC%8B%A4%ED%96%89%20%EC%A4%91%EC%9D%B8%EC%A7%80%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%99%95%EC%9D%B8%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
다음을 구별하려면 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