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"

4 ответа4

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 в сочетании с trace действительно выбрасывает мусор, когда запускается вся ваша оболочка. Если вы можете жить с этим, это действительно работает. Тем не менее, он отображает всю команду, а не только первое слово.

3

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

Это решение на самом деле заботится о спам-мусоре с завершением bash.

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

Это прекрасно работает для меня с 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"'
2

в zsh вы просто определяете свою функцию «precmd». смотрите здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .