Làm thế nào kịch bản của tôi có thể biết khi tôi ở trong bảng điều khiển ảo so với xterm?


11

Một vài tập lệnh của tôi (thay đổi sơ đồ bàn phím, thêm khóa công khai) cần hành động khác khi ở trong bảng điều khiển ảo so với trong xterm. Mã thực sự để làm gì

#!/bin/ksh
if [[ in_a_virtual_console ]]; then
...
else
...
fi

Câu trả lời:


6

Tôi nghe có vẻ như bạn muốn kiểm tra xem có máy chủ X nào kết nối hay không.

Cái gì đó như:

if [ -n "$DISPLAY" ]; then
  : X
else
  : no X
fi

1
Tôi chưa bao giờ ở vị trí có ba câu trả lời hoàn hảo trên stackexchange.
John Baber-Lucero

9

Nếu bạn muốn phân biệt tương tác với các vỏ không tương tác, hãy sử dụng testhỗ trợ sẵn có để phát hiện nó (không chắc chắn nếu ksh có nó, nhưng nhị phân từ coreutils cũng hỗ trợ nó):

test -t 0 # will return 0 for interactive shells

Nếu bạn thực sự có ý định cho dù bạn đang sử dụng tty / pty / pts hay thứ gì khác, hãy phân tích đầu ra từ tty:

$ tty # konsole
/dev/pts/4
$ tty # virtual terminal
/dev/tty2

Tôi chưa bao giờ ở vị trí có ba câu trả lời hoàn hảo trên stackexchange.
John Baber-Lucero

7

Điều này sẽ phụ thuộc vào hệ điều hành. Đối với Linux, bạn có thể làm điều này:

#!/bin/ksh

if [ "$TERM" == "linux" ]; then
  echo "I'm in a virtual console"
else
  echo "I'm not in a virtual console"
fi

Tất nhiên, điều này giả định rằng bạn không tự thay đổi TERMbiến môi trường, nó tự động được đặt thành linuxchỉ khi bạn đăng nhập vào bảng điều khiển ảo (trong Ubuntu, nó được đặt thành xtermtrong các ứng dụng bảng điều khiển, nhưng điều này có thể khác nhau giữa các hệ điều hành). Kiểm tra nội dung của HẠN trong các ứng dụng khác nhau mà bạn đang sử dụng và đặt cho phù hợp.


Tôi chưa bao giờ ở vị trí có ba câu trả lời hoàn hảo trên stackexchange.
John Baber-Lucero
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.