Giữ đầu vào bash trên dòng trên cùng của màn hình


12

Tôi muốn giữ bashđầu vào dấu nhắc lệnh ở trên cùng của màn hình để đầu ra từ các lệnh cũ hơn được đẩy xuống dưới thay vì lên trên.

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


6
Vì vậy, nếu bạn catmột tập tin, nó sẽ được đảo ngược thứ tự?
hỗn loạn

Không, nhưng tôi muốn khối lượng đầu ra bị đẩy xuống
Tom Price

1
bashkhông thể làm điều này, bởi vì bashthậm chí không biết về vị trí màn hình: nó chỉ ghi vào một tệp đầu ra. Bạn sẽ cần một trình giả lập thiết bị đầu cuối biết về bashdấu nhắc tương tác để biết khi nào nên đặt lại con trỏ và khi nào cuộn cửa sổ.
chepner 15/03/2017

Cảm ơn @chepner, tôi đang xem xét lại vấn đề này và nhận xét của bạn khiến tôi nhìn ra ngoài bash và bắt đầu nhìn vào toàn bộ ngăn xếp hiển thị. Tôi muốn duy trì trong các bảng điều khiển ảo dựa trên văn bản (tức là không có Windows X) vì vậy bây giờ tôi sẽ tránh các trình giả lập thiết bị đầu cuối, nhưng đối với các phiên GUI của tôi chắc chắn tôi sẽ xem xét điều đó. Trong trường hợp bất kỳ ai gặp phải câu hỏi này, tôi đoán là nó có liên quan đến tty và tôi hiện đang tìm kiếm cảm hứng ở đây ... linusakesson.net/programming/tty
Tom Price

Câu trả lời:


7

Thêm những dòng này vào .bashrc:

prompt_on_top() {
  tput cup 0 0
  tput el
  tput el1
}

pre_cmd() {
  if [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] || [ -n "$COMP_LINE" ]; then
    return
  fi
  printf "\33[2J"
}

PROMPT_COMMAND="prompt_on_top"
trap 'pre_cmd' DEBUG

bashPROMPT_COMMAND , việc giữ lệnh sẽ được thực thi trước khi bashhiển thị dấu nhắc. Ở đây chúng ta đặt nó là chức năng prompt_on_top, trong đó sử dụng tput để thiết lập con trỏ ở phía trên cùng của màn hình.

bashcũng có cách để thực thi lệnh trước khi thực hiện bất kỳ lệnh nào, sử dụng bẫy để xử lý tín hiệu DEBUG. Ở đây chúng tôi đặt nó thành chức năng pre_cmd, nó sẽ xóa màn hình cũ và không làm gì nếu chúng tôi đã hoàn thành ( COMP_LINE không trống) hoặc chạy lệnh trong BASH_PROMPT.


Có một hạn chế với cách tiếp cận này, nếu đầu ra lệnh quá dài quá phù hợp trong một màn hình, thì đầu ra sẽ được ghi đè bằng prompt_on_tophành động. Trong trường hợp này, bạn cần đặt đầu ra cho máy nhắn tin để đọc toàn bộ đầu ra.


1
Cảm ơn câu trả lời được giải thích tốt của bạn, có rất nhiều để tôi đọc và tìm hiểu. Tôi đã kiểm tra tập lệnh của bạn và hiện tại nó đã xóa hiệu quả đầu ra cũ khỏi màn hình giữa các lệnh. Tôi muốn giữ các đầu ra trước đó trên màn hình, bên dưới dấu nhắc và để nó xuất ra để các đầu ra mới được chèn giữa dấu nhắc và đầu ra cũ, do đó sẽ đẩy đầu ra cũ xuống màn hình.
Tom Giá

Đối với những người đến đây thông qua tìm kiếm trên web, mã này github.com/swirepe/alwaysontop cũng "giữ lời nhắc bash của bạn ở đầu màn hình", cùng với một vài chức năng khác. Không trả lời câu hỏi ban đầu: các đầu ra lệnh cũ hơn sẽ bị xóa như với mã của cuonglm.
WillC

Một nhược điểm khác của giải pháp này là bạn không có phản hồi về lệnh nào được thực hiện lần cuối. Đó là, cat filesẽ hiển thị filenội dung, nhưng bạn không nhận được phản hồi ngay lập tức về lệnh chính xác được thực thi. Lý tưởng nhất là dấu nhắc sẽ được theo sau với phiên bản không được mở rộng + mở rộng của lệnh đã thực hiện, theo sau là thông số std.
tâm lý học
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.