จะทำให้แถบด้านบนของเทอร์มินัลพูดว่าคำสั่งอะไรกำลังทำงานอยู่?


13

ฉันมักจะเรียกใช้คำสั่งแบบขนานที่ใช้เวลานานในการเสร็จสิ้นและบางครั้งฉันก็สูญเสียการติดตามสิ่งที่กำลังทำงานอยู่เนื่องจากมันส่งข้อมูลแบบเดียวกันบนหน้าจอ

คุณรู้วิธีใดบ้างที่จะทราบว่าคำสั่งใดกำลังทำงานอยู่ในเทอร์มินัลใด


1
ไม่แน่ใจว่านี่ยังใช้งานได้หรือไม่ แต่นี่อาจช่วยได้เช่นกัน → askubuntu.com/questions/774532/…
Videonauth

คำตอบ:


12

นำมาจากBash - อัปเดตชื่อเทอร์มินัลโดยเรียกใช้คำสั่งที่สอง· U&Lและเปลี่ยนแปลงเล็กน้อย:

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

นี้ (AB) ใช้DEBUGสัญญาณทริกเกอร์ในการปรับปรุงชื่อกับรายการสุดท้ายจากประวัติของคุณเช่นคำสั่งสุดท้ายที่คุณดำเนินการผ่านลำดับควบคุม XTerm เพิ่มบรรทัดลงในของคุณ~/.bashrcเพื่อเปิดใช้งานคุณสมบัติในทุกหน้าต่างเทอร์มินัลใหม่

หากต้องการพิมพ์เอาต์พุตคำสั่งอื่น ๆ ข้างในชื่อพูดไดเรกทอรีปัจจุบันpwdตามด้วย ":" และคำสั่งที่กำลังทำงานอยู่ผมแนะนำให้ใช้printfดังนี้:

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

เทอร์มินัลอีมูเลเตอร์บางตัวอนุญาตให้คุณระบุหัวเรื่องแบบไดนามิกและให้ชื่อคำสั่งเป็นตัวเลือกเพื่อให้คุณไม่จำเป็นต้องคลาดเคลื่อน - ฉันค้นหาและพบในyakuakeการตั้งค่าโปรไฟล์


2

ชื่อหน้าต่างเทอร์มินัลสามารถเปลี่ยนแปลงได้โดยการเปลี่ยนค่าของตัวแปร$PS1- สตริงพรอมต์หลัก [1] [2] เราสามารถรวมการแก้ปัญหานี้ด้วยความคิดของการใช้ที่คำสั่งจากคำตอบของขนมหวาน history


วิธีที่ 1: อัปเดตค่าของ$PS1อัตโนมัติ (แก้ไข)

เพิ่มบรรทัดต่อไปนี้ที่ด้านล่างของไฟล์~/.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

จากนั้นsource ~/.bashrcหรือเพียงแค่เปิดเทอร์มินัลใหม่และใช้ฟังก์ชันด้วยวิธีนี้:

  • ดำเนินการrtitleเพื่อเริ่มเปลี่ยนชื่อหน้าต่างเทอร์มินัลโดยอัตโนมัติตามคำสั่งที่ดำเนินการครั้งสุดท้าย
  • ดำเนินการrtitleอีกครั้งเพื่อกลับสู่การทำงานเริ่มต้น

วิธีที่ 2: อัปเดตค่า$PS1ด้วยตนเอง (คำตอบเบื้องต้น)

เพิ่มบรรทัดต่อไปนี้ที่ด้านล่างของไฟล์~/.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

จากนั้นsource ~/.bashrcหรือเพียงแค่เปิดเทอร์มินัลใหม่และใช้ฟังก์ชันด้วยวิธีนี้:

  • set-title <something>จะเปลี่ยนชื่อเรื่องของหน้าต่าง terminal <something>เพื่อ
  • set-title ไม่มีอาร์กิวเมนต์จะเปลี่ยนชื่อหน้าต่างเทอร์มินัลเป็นคำสั่งก่อนหน้า

การอ้างอิงและตัวอย่าง:

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.