เทอร์มินัล GNOME - ชื่อกระบวนการในชื่อแท็บ


9

ฉันจะใส่ชื่อกระบวนการทำงานปัจจุบันลงในชื่อแท็บเทอร์มินัล GNOME (หรือแถบชื่อเมื่อมีเพียงแท็บเดียว)

- อัปเดต -

ในการชี้แจงฉันต้องการให้ชื่อแท็บอัปเดตเมื่อฉันเรียกใช้กระบวนการตัวอย่างเช่น:

# title is currently "bash"
$ find / -name foo # while searching for foo, title is "find"
$ # title is once again "bash"
$ less /proc/cpuinfo # title changes to "less"
$ man ls # title changes to man
$ # title returns to "bash"

คำตอบ:


8

พบมัน เว็บไซต์นี้ให้คำอธิบายที่ดีเกี่ยวกับการแก้ปัญหา
ใน bashrc ของคุณดูเหมือนว่า:

case "$TERM" in
xterm*|rxvt*)
    set -o functrace
    trap 'echo -ne "\e]0;$BASH_COMMAND\007"' DEBUG
    PS1="\e]0;\s\007$PS1"
    ;;
*)
    ;;
esac

โดยส่วนตัวฉันไม่คิดว่าฉันจะเพิ่มลงใน bashrc ของฉันเพราะ DEBUG ที่รวมกับการติดตามจะส่งขยะจำนวนมากออกมาเมื่อเชลล์ทั้งหมดของคุณเริ่มต้น หากคุณสามารถใช้ชีวิตกับสิ่งนั้นได้ มันจะแสดงคำสั่งทั้งหมด แต่ไม่ใช่แค่คำแรก


2
ขอบคุณที่ถามคำถามที่ดี นี่ดูเหมือนคำถามง่าย ๆ ในตอนแรก ... หลังจากผ่านไป 10 นาทีแรกมันก็เริ่มทำให้ฉันคลั่ง! นั่นเป็นเหตุผลที่ฉันคิดว่ามันเป็นคำถามที่ดี - ฟังดูง่าย แต่บังคับให้ฉันเรียนรู้สิ่งที่ลึกลงไปเกี่ยวกับการมีปฏิสัมพันธ์ระหว่างเปลือกหอยขั้วและสัญญาณ
DaveParillo

ทำไม - กำหนดPS1? มันส่งผลให้พูดพล่อยๆสำหรับฉันและมันดูเหมือนจะไม่จำเป็นจริงๆที่นี่ ... ?
phil294

ข้อผิดพลาดเพียงสำหรับฉัน
Kzqai

4

เนื่องจากทุกคนรู้วิธีแก้ปัญหาของ David Pashley แล้วฉันรู้สึกประหลาดใจมากฉันใช้เวลานานมากในการหาสิ่งนี้เพราะมันเกือบจะแก่แล้ว

วิธีการแก้ปัญหานี้จะจัดการกับขยะขยะเสร็จสิ้นการทุบตี

เพื่อความชัดเจน: ฉันไม่ได้ทำอะไรด้วยตัวเองที่นี่ แต่เป็นการค้นคว้า เครดิตทั้งหมดไปที่Marius Gedminas

การทำงานนี้สมบูรณ์แบบสำหรับฉันด้วย Gnome-Terminal / Terminator

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'

    # Show the currently running command in the terminal title:
    # http://www.davidpashley.com/articles/xterm-titles-with-bash.html
    show_command_in_title_bar()
    {
        case "$BASH_COMMAND" in
            *\033]0*)
                # The command is trying to set the title bar as well;
                # this is most likely the execution of $PROMPT_COMMAND.
                # In any case nested escapes confuse the terminal, so don't
                # output them.
                ;;
            *)
                echo -ne "\033]0;${USER}@${HOSTNAME}: ${BASH_COMMAND}\007"
                ;;
        esac
    }
    trap show_command_in_title_bar DEBUG
    ;;
*)
    ;;
esac

นี่เป็นcross-postเพราะฉันเพิ่งค้นพบเกี่ยวกับมันและต้องการแบ่งปันและฉันคิดว่ามันมีประโยชน์ที่นี่เช่นกัน


2

ด้านล่างควรทำงาน ฉันมีฟังก์ชั่นในส่วน.bash_functionsไฟล์และแหล่งที่มาไว้ในไฟล์ก่อนการตั้งค่า.bashrc$PROMPT_COMMAND

function term_title
{
        history 1 | awk '{print $2}';
}

PROMPT_COMMAND='echo -ne "\033]0;"$(term_title)"\007"'

1
คุณอยู่ใกล้ แต่ฉันไม่มีอะไรดีกว่านี้อีกแล้ว สิ่งนี้จะให้คำสั่งที่เรียกใช้งานครั้งล่าสุดแก่คุณแต่ไม่ใช่ว่า adurity จะเป็นเช่นไร ฉันคิดว่าเพียงแค่เปลี่ยน term_title เป็น: `ถ้า [jobs]; จากนั้นประวัติศาสตร์ 1 | awk '{พิมพ์ $ 2}'; อย่างอื่น echo -ne 'bash em' fi` จะใช้งานได้ แต่มันไม่สอดคล้องกับการจับกระบวนการด้วยอายุการใช้งานที่สั้นและมันก็ยังไม่เปลี่ยนกลับเมื่อกระบวนการเสร็จสิ้น ฉันไม่รู้เกี่ยวกับการทำงานภายในของ xterm เพื่อทราบวิธียุ่งกับทริกเกอร์ / เหตุการณ์เหล่านั้น
DaveParillo

bash เรียกใช้ $ PROMPT_COMMAND ก่อนแสดงพรอมต์ดังนั้นนี่เป็นวิธีที่ดีที่สุดที่ฉันสามารถทำได้ด้วยวิธีนี้ อาจมีทริกเกอร์อื่นที่สามารถทำงานได้ทันทีหลังจากที่คุณกด Enter แต่ฉันไม่รู้

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