Sanal terminalde mi çalışıyorsunuz?


13

Oturum açarken otomatik olarak tty1oturum açmak ve sonra vlockkilitlemek için kullanmak istiyorum .

Geçerli terminalin bir konsol sanal terminali (örn. tty1) Olup olmadığını Bash'ten nasıl algılayabilirim , böylece vlockhattı girebilir .bash_profileve yalnızca oturum açtığımda çalıştırabilirim tty1?


1
Ben ttygeçerli bir kabuk sahte bir aygıta bağlı olup olmadığını saptamak anlamına yanlış anlaşılabilir çünkü başlığı "bir sanal terminalde çalışan tespit" olarak değiştirmeniz gerektiğini düşünüyorum .
Joseph R.

@JosephR. Bunu işaret ettiğiniz için teşekkürler, düzeltildi
kiri

@JosephR: kötü çağrı. Bir sözde terminal cihazı  tty değil , p ty'dir. Orijinal başlığa geri dönmek üzere.
Incnis Mrsi

Yanıtlar:


15

ttyGeçerli sanal terminalin adını almak için kullanabilirsiniz , ardından bir deyimle test edin case:

#!/bin/sh

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

Daha da iyisi, tüm terminal giriş kabuklarının ttys olduğunu varsaymak yerine.
kiri

1
X'i hariç tutmaya gerek yok: komut dosyası X altındaki bir terminal öykünücüsünde ttyçalışıyorsa, X'in üzerinde çalıştığı fiziksel terminali değil, terminal öykünücüsünün sözde modelini gösterecektir.
Gilles 'SO- kötü olmayı kes

5

Genellikle STDIN'i (FD0) test etmek yeterlidir:

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

Tamam, çünkü .bash_profilegiriş kabuklarında çağrılır ve normal GUI girişinde terminal yoktur, bu nedenle tek terminal giriş kabuğu bir tty olmalıdır. İyi bulmak
kiri

1
Bu snippet, stdin'ini bir dosyadan yönlendiren daha büyük bir komut dosyasına dahil edilmişse, bir VT'den çalıştırılsa bile hiçbir TTY'nin bulunmadığını bildirir.
Joseph R.

1
@JosephR Doğru. Komut dosyaları etkileşimli girdi aldığında , değer genellikle cronya da atişlerle ilgilidir.
JRFerguson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.