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
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:
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
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 test
hỗ 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
Đ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 TERM
biến môi trường, nó tự động được đặt thành linux
chỉ khi bạn đăng nhập vào bảng điều khiển ảo (trong Ubuntu, nó được đặt thành xterm
trong 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.