Terminal GNOME - nama proses dalam judul tab

9

Bagaimana saya bisa memasukkan nama proses yang sedang berjalan ke dalam judul tab Terminal GNOME (atau bilah judul ketika hanya ada satu tab)?

- PEMBARUAN -

Untuk memperjelas, saya ingin judul tab diperbarui ketika saya menjalankan proses, misalnya:

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

Jawaban:

8

Menemukannya. Situs ini memberikan penjelasan yang baik tentang suatu solusi.
Di bashrc Anda, akan terlihat seperti:

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

Secara pribadi, saya tidak berpikir saya akan menambahkannya ke bashrc saya, karena DEBUG yang dikombinasikan dengan jejak memang membuang banyak sampah ketika semua shell Anda mulai. Jika Anda bisa hidup dengan itu, itu benar-benar berhasil. Itu memang menampilkan seluruh perintah, namun, bukan hanya kata pertama.

DaveParillo
sumber
2
Terima kasih telah mengajukan pertanyaan yang bagus. Ini tampak seperti pertanyaan sederhana pada awalnya ... Setelah 10 menit pertama, itu mulai membuatku gila! Itu sebabnya saya pikir itu adalah pertanyaan yang bagus - terdengar sederhana, tetapi memaksa saya untuk mempelajari sesuatu yang lebih dalam tentang interaksi antara shell, terminal dan sinyal.
DaveParillo
mengapa PS1penugasannya? itu menghasilkan kehebohan bagi saya, dan itu tidak benar-benar diperlukan di sini ...?
phil294
Hanya kesalahan untukku.
Kzqai
4

Ya, karena semua orang sepertinya sudah tahu solusi David Pashley, saya agak terkejut sehingga butuh waktu lama untuk menemukan solusi ini karena sudah hampir setua itu.

Solusi ini sebenarnya menangani sampah spamming bash-completion.

Untuk lebih jelasnya: Saya tidak melakukan apa-apa sendiri di sini selain riset. Semua kredit diberikan kepada Marius Gedminas .

Ini bekerja dengan baik untuk saya dengan 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

Juga ini adalah pos-silang karena saya baru tahu tentang itu dan ingin berbagi dan saya pikir ini berguna juga di sini.

Komunitas
sumber
2

Di bawah ini seharusnya berfungsi. Saya memiliki fungsi dalam .bash_functionsfile, dan sumbernya di .bashrcfile sebelum pengaturan $PROMPT_COMMAND.

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

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

sumber
1
Anda dekat, tapi saya tidak punya yang lebih baik. Ini akan memberi Anda perintah yang dieksekusi terakhir , tetapi tidak benar-benar apa yang diinginkan setelahnya. Saya pikir hanya mengubah term_title menjadi: `jika [pekerjaan]; lalu sejarah 1 | awk '{print $ 2}'; lain echo -ne 'bash em' fi` akan bekerja, tetapi tidak konsisten tentang menangkap proses dengan masa hidup yang singkat dan itu masih tidak beralih kembali ketika proses selesai. Saya tidak tahu tentang innerter xterm untuk mengetahui bagaimana mengacaukan pemicu / peristiwa tersebut.
DaveParillo
bash mengeksekusi $ PROMPT_COMMAND tepat sebelum menampilkan prompt, jadi ini yang terbaik yang bisa saya lakukan dengan pendekatan ini. Mungkin ada pemicu lain yang bisa dieksekusi tepat setelah Anda menekan Enter, tapi saya tidak tahu mereka.
2

di zsh Anda cukup mendefinisikan fungsi 'precmd' Anda. lihat di sini .

akira
sumber