Заставить gnome-terminal отображать команду, запущенную как title [duplicate]

Я хочу, чтобы имя выполняемой команды, например unzip, было видно через строку заголовка gnome-terminal, но это кажется невозможным, если запущенное приложение не устанавливает заголовок явно, даже если я выбираю «Заменить начальный заголовок» 'в диалоговом окне профиля.

10
задан 28 April 2012 в 09:25

2 ответа

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

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

Это прекрасно работает для меня с Gnome-Terminal / Terminator (поместите его в свой .bashrc или куда-нибудь, где вы получаете источник)

# 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

Также это кросс-пост , потому что Я только что узнал об этом и хотел поделиться, и я думаю, что это также полезно здесь.

0
ответ дан 28 April 2012 в 09:25

Это было своего рода ответ здесь .

  • trap 'command' DEBUG заставляет bash запускать command перед каждой командой.
  • echo -ne "\033]0;Title\007" изменяет заголовок на «Заголовок»
  • $BASH_COMMAND содержит выполняемую команду.

Комбинируя их, мы получаем

trap 'echo -ne "\033]0;$BASH_COMMAND\007" > /dev/stderr' DEBUG

Тогда нам просто нужно сбросить заголовок после завершения команды. Я сделал это, установив $PS1, чтобы изменить заголовок на текущий путь.

tl; dr: Добавьте эти две строки (в этом порядке, в противном случае я получил искаженное приглашение) в конец ~/.bashrc

PS1="\033]0;\w\007${PS1}"
trap 'echo -ne "\033]0;$BASH_COMMAND\007" > /dev/stderr' DEBUG

Редактировать: Ваш $PS1 может уже изменить заголовок , в этом случае требуется только последняя строка.

0
ответ дан 28 April 2012 в 09:25

Другие вопросы по тегам:

Похожие вопросы: