Термінал 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

Знайшов це. Цей сайт дає хороше пояснення рішення.
У вашому башерці це виглядатиме так:

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

Ну, оскільки, здається, всі вже знають рішення Девіда Пашлі, я дуже здивований, що мені знадобилося так багато часу, щоб знайти цю, бо вона майже така стара.

Це рішення насправді піклується про сміття зі спамом.

Щоб було зрозуміло: я тут нічого не робив, окрім досліджень. Вся заслуга належить Маріусу Гедмінасу .

Це прекрасно працює для мене з 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

Крім того, це перехресний пост, тому що я щойно дізнався про це і хотів поділитися, і я думаю, що це корисно і тут.


2

Нижче має працювати. У мене є функція у .bash_functionsфайлі та джерело її у .bashrcфайлі перед налаштуванням $PROMPT_COMMAND.

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

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

1
Ти поруч, але я не дуже кращий. Це дасть вам останню виконану команду, але насправді не те, яка придатність після. Я подумав просто змінити термін_title на: `if [jobs]; то історія 1 | awk '{print $ 2}'; інше echo -ne 'bash em' fi 'спрацювало б, але це непослідовно щодо лову процесів з коротким життям, і воно все ще не повертається назад, коли процес закінчиться. Я не знаю про взаємодію xterm, щоб знати, як возитися з тими тригерами / подіями.
DaveParillo

bash виконує $ PROMPT_COMMAND безпосередньо перед відображенням підказки, тому це найкраще, що я можу зробити при такому підході. Можуть бути й інші тригери, які можна виконати відразу після натискання клавіші Enter, але я не знаю про них.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.