GNOME Terminal - sekme başlığında işlem adı


9

Geçerli çalışan işlem adını bir GNOME Terminal sekmesi başlığına (veya yalnızca bir sekme olduğunda başlık çubuğuna) nasıl koyabilirim?

-- GÜNCELLEME --

Açıklığa kavuşturmak için, bir işlemi çalıştırdığımda sekme başlığının güncellenmesini istiyorum, örneğin:

# 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"

Yanıtlar:


8

Buldum. Bu site bir çözümün iyi bir açıklamasını sunar.
Bashrc'nizde şöyle görünecektir:

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

Şahsen, bashrc'ime ekleyeceğimi sanmıyorum, çünkü DEBUG iz ile birleştirildiğinde tüm kabuğunuz başladığında bir sürü çöp atıyor. Bununla yaşayabilirsen, aslında işe yarıyor. Bununla birlikte, sadece ilk kelimeyi değil, tüm komutu görüntüler.


2
İyi bir soru sorduğunuz için teşekkür ederim. Bu ilk başta basit bir soru gibi görünüyordu ... İlk 10 dakikadan sonra, beni deli etmeye başlamıştı! Bu yüzden bunun iyi bir soru olduğunu düşündüm - kulağa basit geliyor, ancak beni kabuk, terminal ve sinyaller arasındaki etkileşim hakkında daha derin bir şey öğrenmeye zorladım.
DaveParillo

neden- PS1tayin? benim için saçma bir sonuç veriyor ve burada gerçekten gerekli görünmüyor ...?
phil294

Sadece benim için hatalar.
Kzqai

4

Herkes zaten David Pashley'nin çözümünü biliyor gibi göründüğünden, bunu bulmam çok uzun sürdü çünkü neredeyse eskidir.

Bu çözüm aslında bas-tamamlama spam çöp çöpü halleder.

Açık olmak gerekirse: Ben burada araştırmadan başka bir şey yapmadım. Tüm kredi Marius Gedminas'a gidiyor .

Gnome-Terminal / Terminator ile bu benim için mükemmel çalışıyor

# 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

Ayrıca bu bir çapraz gönderi çünkü bunu öğrendim ve paylaşmak istedim ve burada da yararlı olduğunu düşünüyorum.


2

Aşağıdakilerin çalışması gerekir. Bir .bash_functionsdosyada işlevi var ve .bashrcayarlamadan önce dosyada kaynak $PROMPT_COMMAND.

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

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

1
Yakınsın, ama daha iyisi yok. Bu size en son yürütülen komutu verecektir , ancak gerçekte ne kadar sonra olduğunu anlayamazsınız. Ben sadece term_title değiştirerek düşündüm: `if [jobs]; o zaman tarih 1 | awk '{print $ 2}'; aksi halde echo -ne 'bash em' fi` işe yarar, ancak kısa ömürlü süreçleri yakalamakta tutarsızdır ve işlem bittiğinde hala geri dönmez. Bu tetikleyicilerle / olaylarla nasıl karıştırılacağını bilmek için xterm'in iç işleri hakkında bilmiyorum.
DaveParillo

bash, istemi görüntülemeden hemen önce $ PROMPT_COMMAND öğesini çalıştırır, bu yüzden bu yaklaşımla yapabileceğim en iyisi budur. Enter tuşuna bastıktan hemen sonra çalışabilecek başka tetikleyiciler de olabilir, ancak bunları bilmiyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.