Hiển thị tên phiên màn hình GNU và tiêu đề cửa sổ trong dấu nhắc shell


11

Có cách nào để trình bày tên phiên màn hình GNU và tiêu đề cửa sổ trong dấu nhắc của trình bao (giả sử, dấu nhắc Bash được định nghĩa bởi PS1)?

Câu trả lời:


14

Màn hình cung cấp một số biến môi trường (từ screen(1) manpage):

STY              Alternate socket name.
WINDOW           Window number of a window (at creation time).

"Tại thời điểm tạo" có nghĩa là nếu bạn đánh số lại một cửa sổ (sử dụng numberlệnh của màn hình ), trình bao sẽ không được thông báo về sự thay đổi và $ WINDOW sẽ vẫn giống như số cửa sổ đầu tiên.

Bạn có thể sử dụng một cái gì đó như:

PS1='\u@\h(${STY}:${WINDOW}):\w$ '

1
Hoàn hảo! Đây là những gì tôi đang tìm kiếm. BTW, có cách nào để lấy tiêu đề cửa sổ, thay vì số cửa sổ?
brandizzi

Không phải tôi biết, không có api cho màn hình và khi bạn đưa ra lệnh thì không có đầu ra - nó sẽ chuyển đến cửa sổ hiện tại trong màn hình. Ví dụ screen -xr 2466 -X windows.
Arcege

Mặc dù nó có thể rơi vào trường hợp đánh số lại, nhưng có cách nào để truy cập tên của cửa sổ nếu nó được đặt Ctrl-a Akhông?
Thalis K.

1
Nếu GNU screenđã được biên soạn với các -Qtùy chọn (query), sau đó bạn có thể chạy một số lệnh, chẳng hạn như titlewindowsvà có màn hình hiển thị dữ liệu đến thiết bị xuất chuẩn, tuy nhiên, không có một ký tự dòng mới.
Arcege 6/07/2015

3

Tôi luôn luôn sử dụng tên phiên màn hình chính xác. Sau đó, tôi có thể thêm var STY env var của màn hình, với id số bị loại bỏ (cảm ơn dimo414), vào PS1. Tôi không trang trí nó bằng niềng răng xoăn hay bất cứ thứ gì vì không phải lúc nào tôi cũng ở trong một phiên. Ví dụ đơn giản:

PS1='\u@\h ${STY#[0-9]*.} \w$ '

1

Tôi sử dụng cái này:

(`echo ${STY} | sed -e 's/[0-9]*\.//g'`:${WINDOW}:`screen -Q title`)

xóa số quy trình khỏi ${STY}
bao gồm số cửa sổ (như đã đề cập "tại thời điểm tạo")
bao gồm tiêu đề cửa sổ (như được trả về từ screen -Q title)

ghi chú:

  • Lần đầu tiên nó chạy, screen -Qchờ đợi một lần nhấn phím trở lại
  • tôi đặt tiêu đề cửa sổ với Ca CA và sau đó nguồn .profile của tôi để cập nhật lời nhắc

5
Sử dụng ${STY#[0-9]*.}tránh cần phải thông qua đường ống sed.
dimo414
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.