가상 터미널에서 실행 중인지 감지 하시겠습니까?


12

내가하고 싶은 자동 로그인tty1로그인에 다음 사용 vlock을 잠급니다.

현재 터미널이 콘솔 가상 터미널 (예 :) 인 경우 Bash에서 어떻게 감지 tty1하여 vlock라인을 넣고 .bash_profile로그인 할 때만 실행되도록 할 수 tty1있습니까?


1
tty현재 셸이 의사 터미널 장치에 연결되어 있는지 감지하는 것으로 오해 될 수 있으므로 제목을 "가상 터미널에서 실행중인 경우 감지"로 변경해야한다고 생각합니다 .
Joseph R.

@JosephR. 지적 해 주셔서 감사합니다.
kiri

@JosephR : 나쁜 전화. 의사 단말 장치는 P의  TY하지 TTY. 원래 제목으로 되돌리려 고합니다.
Incnis Mrsi

답변:


14

tty현재 가상 터미널의 이름을 얻은 다음 case명령문으로 테스트 할 수 있습니다 .

#!/bin/sh

case $(tty) in /dev/tty[0-9]*)
    vlock ;;
esac

모든 터미널 로그인 쉘이 tty라고 가정하는 대신 더 좋습니다.
kiri

1
X를 제외 할 필요가 없습니다. 스크립트가 X 아래 tty의 터미널 에뮬레이터에서 실행중인 경우 X가 실행중인 물리적 터미널이 아니라 터미널 에뮬레이터의 유사 터미널이 표시됩니다.
Gilles 'SO- 악마 그만해

5

일반적으로 STDIN (FD0)을 간단히 테스트하면 충분합니다.

[ -t 0 ] && echo "TTY available" || echo "No TTY available"

OK 때문에 .bash_profile유일한 터미널 로그인 쉘은 청각 장애해야하므로 터미널이없는 로그인 쉘 및 일반 GUI 로그인 호출됩니다. 좋은 발견
kiri

1
이 스 니펫이 stdin이 파일에서 경로 재 지정된 더 큰 스크립트에 포함 된 경우 VT에서 실행하더라도 TTY를 사용할 수 없음을보고합니다.
Joseph R.

1
@JosephR 맞습니다. 값으로 자주 cron또는 at스크립트를 대화식 입력을 가정 할 때 실패를 방지하기 위해 작업.
JR 페 거슨
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.