Làm thế nào để làm thanh trên cùng của thiết bị đầu cuối của tôi nói lệnh nào đang chạy?


13

Tôi thường chạy các lệnh song song mất nhiều thời gian để hoàn thành và đôi khi tôi mất dấu vết về những gì đang chạy ở đâu vì chúng xuất ra cùng một loại thông tin trên màn hình.

Bạn có biết cách nào để tìm ra lệnh nào đang chạy trong thiết bị đầu cuối nào không?


1
Không chắc chắn nếu điều này vẫn hoạt động, nhưng điều này cũng có thể giúp ích ngoài câu trả lời tuyệt vời của @d PLAY. → Askubfox.com/questions/774532/ cấp
Videonauth

Câu trả lời:


12

Lấy từ Bash - Cập nhật tiêu đề thiết bị đầu cuối bằng cách chạy lệnh thứ hai · U & L và thay đổi một chút:

trap 'echo -ne "\033]2;$(history 1 | sed "s/^[0-9 ]* \+//")\007"' DEBUG

(Ab) này sử dụng DEBUGtín hiệu làm trình kích hoạt để cập nhật tiêu đề với mục nhập cuối cùng từ lịch sử của bạn, tức là lệnh cuối cùng bạn đã thực hiện, thông qua Trình tự điều khiển XTerm . Thêm dòng vào của bạn ~/.bashrcđể bật tính năng này trong mọi cửa sổ đầu cuối mới.

Để in đầu ra lệnh khác cùng với tiêu đề, giả sử thư mục hiện tại có dấu pwd":" và lệnh hiện đang chạy, tôi khuyên bạn nên sử dụng printfnhư sau:

trap 'echo -ne "\033]2;$(printf "%s: %s" "$(pwd)" "$(history 1 | sed "s/^[0-9 ]* \+//")")\007"' DEBUG

Một số trình giả lập thiết bị đầu cuối cho phép bạn chỉ định một tiêu đề động và thậm chí cung cấp cho bạn tên lệnh làm tùy chọn để bạn thậm chí không cần phải loay hoay - Tôi đã tìm kiếm và tìm thấy nó trong yakuakecài đặt hồ sơ.


2

Tiêu đề cửa sổ đầu cuối có thể được thay đổi bằng cách thay đổi giá trị của biến $PS1- chuỗi dấu nhắc chính. [1] [2] . Chúng ta có thể kết hợp giải pháp này với ý tưởng sử dụng lệnh từ câu trả lời của Dessert . history


Cách tiếp cận 1: Cập nhật giá trị $PS1tự động. (Cập nhật)

Thêm các dòng sau vào dưới cùng của tệp ~/.bashrc:

# Change the terminal window title, based on the last executed command
rtitle() {
        # If the variable $PS1_bak is unset,
        # then store the original value of $PS1 in $PS1_bak and chang $PS1
        # else restore the value of $PS1 and unset @PS1_bak
        if [ -z "${PS1_bak}" ]; then
                PS1_bak=$PS1
                PS1+='\e]2;$(history 1 | sed "s/^[0-9 ]* \+//")\a'
        else
                PS1=$PS1_bak
                unset PS1_bak
        fi
};
export -f rtitle        # Export the function to be accessible in sub shells
#rtitle                 # Uncomment this line to change the default behaviour

Sau đó source ~/.bashrchoặc chỉ cần mở một thiết bị đầu cuối mới và sử dụng chức năng theo cách này:

  • Thực thi rtitleđể bắt đầu thay đổi tiêu đề cửa sổ đầu cuối tự động, dựa trên lệnh được thực hiện cuối cùng.
  • Thực hiện rtitlemột lần nữa để trở lại hành vi mặc định.

Cách tiếp cận 2: Cập nhật giá trị của $PS1thủ công. (Câu trả lời ban đầu)

Thêm các dòng sau vào dưới cùng của tệp ~/.bashrc:

set-title() {                                                                                 # Set a title of the current terminal window
        [[ -z ${@} ]] && TITLE="$(history 2 | head -1 | sed "s/^[0-9 ]* \+//")" || TITLE="$@" # If the title is not provided use the previous command
        [[ -z ${PS_ORIGINAL} ]] && PS_ORIGINAL="${PS1}" || PS_ORIGINAL="${PS_ORIGINAL}"       # Use the original value of PS1 for each future change
        PS1="${PS_ORIGINAL}"'\e]2;'"$TITLE"'\a'                                               # Change the prompt (the value of PS1)
}; export -f set-title

Sau đó source ~/.bashrchoặc chỉ cần mở một thiết bị đầu cuối mới và sử dụng chức năng theo cách này:

  • set-title <something>sẽ thay đổi tiêu đề cửa sổ đầu cuối thành <something>.
  • set-title không có đối số sẽ thay đổi tiêu đề cửa sổ đầu cuối thành lệnh trước đó.

Tài liệu tham khảo và ví dụ:

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.