Bash는 대화형 SSH 세션과 내장형 SSH 세션을 구별할 수 있나요?

Bash는 대화형 SSH 세션과 내장형 SSH 세션을 구별할 수 있나요?

환경 변수와 구성은 실제로 세션에 로그인할 때만 읽는 것처럼 보이기 때문에 대화형 프롬프트에서 실행해야 하는 Bash 스크립트가 있습니다. 예는 다음과 같습니다:

좋아요

me@client:~$ ssh box
user@box:~$ /usr/local/bin/myscript

나쁜

me@client:~$ ssh box "/usr/local/bin/myscript"

단일 줄 SSH 명령을 통해 실행되는지 확인하기 위해 스크립트에서 사용할 수 있는 Bash-fu가 있습니까?

답변1

표준 입력에 연결된 터미널이 있는지 확인할 수 있습니다( tty명령이 수행하는 작업). 스크립트에 다음 줄을 추가하세요.

if ! tty >/dev/null; then
    echo "Must be run from a tty"
    exit 1
fi

올바르게 실행되지 않으면 이제 스크립트가 오류와 함께 종료됩니다.

$ ssh badabing ~/scripts/a.sh
Must be run from a tty

$ ssh badabing
terdon@badabing ~ $ ~/scripts/a.sh
Works!

관련 정보