bashrc: làm sao để biết cửa sổ X có sẵn hay không?


10

Có một phần trong tôi ~/.bashrc, đặt $ EDITOR là gvim. Nó hoạt động tốt khi tôi ở trong cửa sổ X. Tuy nhiên, nếu tôi ssh đến máy trạm của tôi (từ một máy trạm khác), gvim bắt đầu phàn nàn "không thể mở màn hình".

Vì vậy, tôi muốn đặt một ifcâu lệnh trong bashrc, rằng nếu cửa sổ X có sẵn thì hãy sử dụng gvim, nếu không thì hãy để nó là vim.

Làm thế nào tôi có thể đạt được điều đó?

Câu trả lời:


11

Một cách để làm điều này kiểm tra sự tồn tại của biến môi trường HIỂN THỊ:

if [ "$DISPLAY" ]
then
    EDITOR=gvim
else
    EDITOR=vim
fi

Trong một số trường hợp, HIỂN THỊ sẽ được đặt ngay cả khi gvim của bạn sẽ không thể liên lạc với máy chủ X. Trong những trường hợp đó, hãy sử dụng chương trình RunningX :

if RunningX
then
    EDITOR=gvim
else
    EDITOR=vim
fi


7

Biến $DISPLAYmôi trường nên được đặt thành một cái gì đó nếu bạn ở trong X và bỏ đặt nếu bạn không được kết nối với màn hình.

Vì vậy, bạn có thể sử dụng này:

if [ -n "$DISPLAY" ]; then
    alias vim='gvim'
else
    alias vim='vim'
fi

Nhưng có một giải pháp khác. Nó được gọi là chuyển tiếp ssh X.

Chạy

ssh -X yourworkstation

sau đó bạn có thể chạy vim trên máy bạn đang sử dụng và nó sẽ hiển thị trên máy bạn đang chạy X.


3

Đặt cái này vào .bashrc của bạn:

if [ -z "${DISPLAY:-}" ]; then
  EDITOR='vim'
else
  EDITOR='gvim'
fi

1

Mặc dù đây không phải là câu trả lời cho câu hỏi của bạn, tôi nghĩ có thể hữu ích khi chỉ ra rằng nếu bạn đang chuyển từ một máy trạm đang chạy X * sang một máy trạm khác, bạn thực sự có thể sử dụng gvim nếu bạn thiết lập chuyển tiếp X với ssh. Thông tin cửa sổ sẽ được gửi qua mạng và gvim sẽ chỉ bật lên như chạy nếu chạy cục bộ.

Thêm phần sau vào ~ / .ssh / config

Host *
   ForwardX11 yes 

Bây giờ bạn sẽ có thể chạy gvim.

Nếu máy trạm gốc của bạn là Windows và không chạy X, bạn thực sự CÓ THỂ khởi động máy chủ X cục bộ bằng Cygwin. Sau khi thiết lập xong, bạn có thể định cấu hình các máy khách ssh phổ biến như PuTTy để thực hiện chuyển tiếp X11, và sau đó gvim sẽ bật lên trong cửa sổ có vẻ là cửa sổ trang trí gốc.


0

Chỉ cần kiểm tra một trong các biến môi trường mà Xorg thiết lập khi khởi động, như XLOCAL có chứa thông tin về phiên X11 hiện tại.


0

Tôi thích câu trả lời của garyjohn khi sử dụng RunningX vì nó thông minh về các biến HIỂN THỊ xấu nhưng không trống.

Nhưng .. tôi muốn đi tốt hơn Tôi thường sử dụng các phiên màn hình. Tôi có thể bắt đầu một phiên màn hình ở nhà, HIỂN THỊ được xác định. Sau đó, tôi đến từ nơi khác, HIỂN THỊ vẫn được xác định và nó thực sự hiển thị ... ở nhà! Vì vậy, sau đó tôi sẽ 'xuất $ HIỂN THỊ ='. Điều này tốt nhưng vì câu trả lời đó đã được kiểm tra và đã tìm thấy biến HIỂN THỊ hợp lệ tại thời điểm .bashrc ban đầu chạy EDITOR vẫn sẽ được đặt thành gvim.

Tôi đến đây để tìm giải pháp cho một vấn đề tương tự, tôi muốn sử dụng yelp để duyệt manpage X-GUI nhưng tự động thả xuống lệnh man truyền thống khi không sử dụng X. Dựa trên những gì tôi đọc ở đây, tôi đã nghĩ ra điều này:

man () {
    if RunningX
    then
        yelp "man:$@";
    else
        /usr/bin/man "$@";
    fi
}

Tôi nghĩ rằng đối với vấn đề EDITOR, người ta có thể làm như sau:

EDITOR=vim
vim () {
    if RunningX
    then
        gvim "$@";
    else
        vim "$@";
    fi
}

Tôi vừa mới đăng câu chuyện dài nhưng tôi chưa thử. Tôi coi mình là một người mới chơi bash. Tôi đã thử nghiệm 'lệnh người đàn ông' của mình, nó hoạt động! Tôi đang sử dụng emacs cho trình soạn thảo của mình, tuy nhiên, nó tự kiểm tra X. Tôi thậm chí không cài đặt gvim.

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.