Làm thế nào để bao gồm tên phiên của màn hình trong hardstatus?


17

Tôi sử dụng các phiên màn hình khác nhau cho các dự án khác nhau. Màn hình bắt đầu như thế nào screen -S project1. Bây giờ, tôi muốn đề cập đến 'project1' trong dòng hardstatus.

Tên phiên có thể được lấy từ biến môi trường STY : STY=13539.project1.
Nhưng làm thế nào để có được điều này vào màn hình? Tôi đã thử lệnh backtick và% `trong hardstatus, nhưng dường như tôi không thể hiểu đúng.

Tôi đã làm gì:

.screenrc:

hardstatus string '%H:%`'
backtick 0 30 30 echo $STY

không có may mắn, trống rỗng `.

backtick 0 30 30 sessionname

vẫn không gặp may, tên phiên: Không tìm thấy

Câu trả lời:


18

Bạn có thể bao gồm chuỗi này (với thông tin bổ sung, nếu muốn) trong $PS1:

\[\e]0;$STY\007

bên trong dấu ngoặc đơn để trì hoãn việc đánh giá biến. Sau đó thêm phần này vào ~/.screenrc:

hardstatus string '%H:%h'

Thật không may, screenkhông được đặt $STYtrong môi trường của các lệnh mà nó sinh ra cho backticktính năng này.

Một tùy chọn khác, thay vì một ở trên:

hardstatus string '%H:%`'
backtick 0 30 30 sh -c 'screen -ls | grep --color=no -o "$PPID[^[:space:]]*"'

Ưu điểm của cái này là nó tuân theo các thay đổi được thực hiện bằng cách sử dụng sessionnamelệnh. Tùy chọn đầu tiên không.

Biên tập:

Từ đây :

Vì $ STY chưa được đặt khi nguồn màn hình .screenrc, bạn có thể sử dụng thủ thuật này trong .screenrc:

    screen 
    screen $SHELL -c 'screen -X caption always "$STY"' 

Tức là gửi một lệnh màn hình đến cửa sổ đầu tiên.


1
Đối với giải pháp bắt đầu bằng backtick: (1.) là backtickmột bash dựng sẵn? một lệnh màn hình gnu? một thực thi nhị phân? Có một trang người đàn ông? (2.) Tôi biết nó hoạt động vì tôi đã thử nó nhưng làm thế nào để bạn có được lệnh hai dòng để thực thi khi có vẻ như .screenrccú pháp màn hình gnu yêu cầu một dòng cho hardstatuslệnh? (3.) làm cách nào để sửa đổi lệnh của bạn để cho phép nối thêm một số văn bản sau tên phiên?
Trevor Boyd Smith

@TrevorBoydSmith: backticklà một screenlệnh. Tìm kiếm nó trong trang người đàn ông cho screen. Có thể là tốt nhất nếu bạn đăng một câu hỏi mới liên quan đến phần còn lại của những gì bạn đang hỏi. Tôi không nghĩ đầu ra hardstatus có thể chiếm hai dòng trên màn hình. Bạn có thể sử dụng sedhoặc awkthay vì greplàm những gì grepđang làm trong ví dụ của tôi và cũng có thể thêm một số văn bản bổ sung.
Tạm dừng cho đến khi có thông báo mới.

Khi tôi nói "hai dòng" cho phép tôi nói lại những gì tôi muốn nói, tôi không muốn hiển thị hai dòng cho hardstatus. Tôi đã bối rối bởi %` và sự backticktồn tại trên các dòng riêng biệt ... chúng trông không liên quan nhưng bây giờ tôi đọc tài liệu chobacktick tôi thấy rằng hai cú pháp có liên quan / cần thiết / hợp lệ (mặc dù cú pháp khá lạ IMO).
Trevor Boyd Smith

3

Đối với tôi điều này dễ dàng làm việc với việc chèn %Svào hardstatus.

MWE (.screenrc):

hardstatus on
hardstatus alwayslastline
hardstatus string "%S"

Tuy nhiên, điều này sẽ hiển thị tên phiên mà không cần ID (như ${STY#*.}); trong ví dụ của bạn : project1.

(Trả lời tương tự cho các câu hỏi khác ở đâyở đây cho đầy đủ).


2
FYI, "% S" hoạt động trên các phiên bản mới hơn của màn hình gnu (hoạt động trên phiên bản Fedora 21 đối với tôi) nhưng không phải phiên bản cũ hơn (không hoạt động trên phiên bản CentOS 6 đối với tôi).
Trevor Boyd Smith
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.