bash 스크립트가 원격 터미널 세션이 아닌 "콘솔"에서 실행되고 있는지 어떻게 확인할 수 있습니까?

bash 스크립트가 원격 터미널 세션이 아닌 "콘솔"에서 실행되고 있는지 어떻게 확인할 수 있습니까?

bash 스크립트가 원격 터미널 세션이 아닌 "콘솔"에서 실행되고 있는지 어떻게 확인할 수 있습니까? 스크립트가 /dev/console에서 실행되고 있는지 확인할 수 있는 방법이 있다고 가정합니까? 아니면 잘못된 (이진) 트리를 향해 짖고 있는 걸까요?

답변1

이건 가능성이 있는 것 같아XY 문제.

이전 Unix 명령을 사용하면 tty터미널이 어떤 장치에 있는지 알려줄 수 있습니다. 따라서 다음과 같은 것이 귀하의 요구 사항을 충족할 수 있습니다.

if [ $(tty) = "/dev/console" ]; then
    echo "Yes, I am on the console."
else
    echo "No, I am not on the console."
fi

하지만,Linux 가상 콘솔의 로그인 세션에서 실행되는 프로그램은 /dev/tty1비슷한 내용을 볼 수 있습니다. 직렬 콘솔을 사용하는 경우 /dev/ttyS0다른 직렬 포트 장치가 표시될 수 있습니다. 텍스트를 볼 수 있는 유일한 경우 /dev/console는 비상 셸/단일 사용자 모드에서 실행할 때입니다. 어떤 장치가 유효한 콘솔인지 아는 것은 간단한 일이 아니며 /etc/securetty시스템 관리자가 구성할 수 있는 이유 중 하나입니다.

(직렬 포트를 거부하기로 선택한 경우 어딘가에 있는 시스템 관리자가 LAN의 직렬 연결을 사용하여 문제를 해결하려고 시도할 것입니다.매우원격 시스템이 당신을 싫어할 수도 있습니다. )

프로세스나 스크립트가 서비스로 실행되는 경우 systemd전통적인 의미의 TTY가 전혀 없을 수 있습니다. 대신 표준 출력 및 표준 오류가 systemd로깅 기능에 삽입됩니다. 서비스 구성 방식에 따라 콘솔.

질문을 편집하여 지정하십시오.귀하가 "콘솔"에 있는지 알고 싶으시면 저희가 귀하의 실제 요구에 맞는 질문에 대한 답변을 얻을 수 있는 방법을 찾으려고 노력할 수 있습니다.

답변2

를 실행하는 경우 ps axuTTY 열에서 프로세스에서 사용하는 루트 "콘솔"을 찾습니다.

모든 프로세스에는 루트 init 프로세스까지 상위 프로세스가 있습니다.

답변3

두 환경 모두에서 결과를 탐색하는 데 사용됩니다 diff. 확인해 볼 일이다.env | sort$DISPLAY

또한 읽어보시기 바랍니다 man isatty.

관련 정보