Mendeteksi jika berjalan di terminal virtual?


12

Saya ingin autologin ke tty1pada login dan kemudian menggunakan vlockuntuk menguncinya.

Bagaimana saya bisa mendeteksi dari Bash jika terminal saat ini adalah terminal virtual konsol (mis. tty1), Sehingga saya bisa meletakkan vlockgaris .bash_profiledan menjalankannya hanya jika masuk melalui tty1?


1
Saya pikir Anda harus mengubah judul menjadi "Deteksi jika berjalan di terminal virtual" karena ttydapat disalahpahami berarti mendeteksi jika shell saat ini terhubung ke perangkat pseudo-terminal.
Joseph R.

@ JosephephR. Terima kasih telah menunjukkannya, diperbaiki
kiri

@ JosephephR: panggilan buruk. Perangkat pseudo-terminal adalah p  ty, bukan tty. Akan kembali ke judul asli.
Incnis Mrsi

Jawaban:


14

Anda dapat menggunakan ttyuntuk mendapatkan nama terminal virtual saat ini, kemudian mengujinya dengan casepernyataan:

#!/bin/sh

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

Bahkan lebih baik, daripada mengasumsikan semua shell login terminal adalah ttys.
kiri

1
Tidak perlu mengecualikan X: jika skrip berjalan di emulator terminal di bawah X, ttyakan menunjukkan pseudoterminal terminal emulator, bukan terminal fisik yang dijalankan X.
Gilles 'SANGAT berhenti menjadi jahat'

5

Secara umum cukup dengan hanya menguji STDIN (FD0):

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

OK, karena .bash_profiledipanggil pada shell login dan GUI login normal tidak memiliki terminal, jadi satu-satunya shell login terminal adalah tty. Good find
kiri

1
Jika potongan ini dimasukkan dalam skrip yang lebih besar yang stdinnya diarahkan dari file, itu akan melaporkan bahwa tidak ada TTY tersedia bahkan jika dijalankan dari VT.
Joseph R.

1
@ Joseph benar. Nilai sering dengan cronatau atpekerjaan untuk menghindari kegagalan ketika skrip menerima input interaktif.
JRFerguson
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.