Phát hiện nếu chạy trong một thiết bị đầu cuối ảo?


12

Tôi muốn tự động đăng nhập để tty1đăng nhập và sau đó sử dụng vlockđể khóa nó.

Làm cách nào tôi có thể phát hiện từ Bash nếu thiết bị đầu cuối hiện tại là thiết bị đầu cuối ảo của bàn điều khiển (ví dụ tty1), để tôi có thể đặt vlockdòng vào .bash_profilevà chỉ chạy nếu đăng nhập qua tty1?


1
Tôi nghĩ bạn nên thay đổi tiêu đề thành "Phát hiện nếu chạy trong thiết bị đầu cuối ảo" bởi vì ttycó thể bị hiểu nhầm là phát hiện nếu vỏ hiện tại được kết nối với thiết bị đầu cuối giả.
Joseph R.

@JosephR. Cảm ơn bạn đã chỉ ra rằng, đã sửa
kiri

@JosephR: gọi xấu. Một thiết bị đầu cuối giả là p  ty, không phải tty. Về để trở lại tiêu đề ban đầu.
Incni Mrsi

Câu trả lời:


14

Bạn có thể sử dụng ttyđể lấy tên của thiết bị đầu cuối ảo hiện tại, sau đó kiểm tra lại bằng một casetuyên bố:

#!/bin/sh

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

Thậm chí tốt hơn, thay vì giả định tất cả các vỏ đăng nhập thiết bị đầu cuối là ttys.
kiri

1
Không cần loại trừ X: nếu tập lệnh đang chạy trong trình giả lập thiết bị đầu cuối bên dưới X, ttysẽ hiển thị giả mã của trình mô phỏng đầu cuối, không phải là thiết bị đầu cuối vật lý mà X đang chạy.
Gilles 'SO- ngừng trở nên xấu xa'

5

Nói chung là đủ để kiểm tra STDIN (FD0):

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

OK, bởi vì .bash_profileđược gọi trên shell đăng nhập và đăng nhập GUI bình thường không có thiết bị đầu cuối, vì vậy vỏ đăng nhập thiết bị đầu cuối duy nhất phải là một tty. Tìm kiếm tốt
kiri

1
Nếu đoạn mã này được bao gồm trong một tập lệnh lớn hơn có stdin được chuyển hướng từ một tệp, nó sẽ báo cáo rằng không có TTY nào khả dụng ngay cả khi chạy từ VT.
Joseph R.

1
@JosephR Đúng. Giá trị thường có cronhoặc atcông việc để tránh thất bại khi tập lệnh giả định đầu vào tương tác.
JRFerguson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.