Detectar se estiver executando em um terminal virtual?


12

Eu gostaria de autologin para tty1no login e então usar vlockpara travá-lo.

Como posso detectar no Bash se o terminal atual é um terminal virtual do console (por exemplo tty1), para que eu possa colocar a vlocklinha .bash_profilee executá-la somente se estiver efetuando login tty1?


1
Eu acho que você deve alterar o título para "Detectar se estiver executando em um terminal virtual" porque ttypode ser mal interpretado como detectar se o shell atual está conectado a um dispositivo pseudo-terminal.
Joseph R.

@JosephR. Obrigado por apontar isso, fixa
kiri

@ JosephphR: chamada ruim. Um dispositivo pseudo-terminal é p  ty, não tty. Prestes a reverter para o título original.
Incnis MRSI

Respostas:


14

Você pode usar ttypara obter o nome do terminal virtual atual e testá-lo com uma caseinstrução:

#!/bin/sh

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

Melhor ainda, em vez de assumir que todos os shells de login do terminal são ttys.
quer

1
Não é necessário excluir o X: se o script estiver sendo executado em um emulador de terminal no X, ttymostrará o pseudoterminal do emulador de terminal, não o terminal físico no qual o X está sendo executado.
Gilles 'SO- stop be evil'

5

Geralmente é suficiente simplesmente testar STDIN (FD0):

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

OK, porque .bash_profileé chamado nos shells de login e o login normal da GUI não possui um terminal, portanto, o único shell de login do terminal deve ser um tty. Boa localização
kiri

1
Se esse trecho fosse incluído em um script maior que tivesse seu stdin redirecionado de um arquivo, ele relataria que nenhum TTY está disponível, mesmo que seja executado a partir de um VT.
Joseph R.

1
@JosephR Correct. O valor geralmente é com cronou atjobs para evitar falhas quando os scripts assumem entrada interativa.
JRFerguson
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.