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.

관련 정보