Как изменить заголовок текущей вкладки терминала, используя только командную строку [дубликат]

На этот вопрос уже есть ответ здесь:

Ни один из опубликованных в настоящее время ответов не работает / отвечает на вопрос.

Согласно моему первоначальному вопросу, ни установка PS1 , ни PROMPT_COMMAND не оказали никакого влияния.


Используя только команду в командной строке, как мне изменить заголовок текущей вкладки терминала?

Многие сообщения предлагают следующее:

echo -en "\033]0;New terminal title\a"

но ничего не делает.

Ни один из текущих ответов не работает (некоторые не отвечают на вопрос), поэтому для ясности:

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

Кроме того, переменная PROMPT_COMMAND не установлена ​​в моих сеансах терминала. Если я установлю:

PROMPT_COMMAND='echo -en "\033]0;New terminal title\a"'

, это не даст никакого эффекта.

Какая команда является правильной?


К вашему сведению, вывод uname -a :

Linux d136172 3.13.0-45-generic # 74-Ubuntu SMP Tue 13 января 19: 36:28 UTC 2015 x86_64 x86_64 x86_64 GNU / Linux

41
задан 27 February 2019 в 17:07

10 ответов

от @Maythux, этих работ для моих потребностей игнорировать мой автобыстрый текущий каталог на терминале.

PROMPT_COMMAND='echo -en "\033]0;New terminal title\a"'

Инструкция

Меняют струну на "Новом Терминальном Имени" с $("pwd"):

PROMPT_COMMAND='echo -en "\033]0; $("pwd") \a"'

Это автоматически изменит заголовок, даже когда Вы добавляете новую вкладку.

<час>

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

PROMPT_COMMAND='echo -en "\033]0;$(whoami)@$(hostname)|$(pwd|cut -d "/" -f 4-100)\a"'

Добавляют эту установку на Ваш ~/.bashrc.

23
ответ дан 23 November 2019 в 00:07

От https://askubuntu.com/a/774543/455406, определенное для удара решение состоит в том, чтобы создать пользовательскую функцию (см., например, это практическое руководство ) как

# function to set terminal title  
function set-title() {
  if [[ -z "$ORIG" ]]; then
    ORIG=$PS1
  fi
  TITLE="\[\e]2;$*\a\]"
  PS1=${ORIG}${TITLE}
}

, который позволяет Вам звонить set-title <name you want to set it to>

12
ответ дан 23 November 2019 в 00:07

Когда PS1 наборы заголовок, любая попытка установить заголовок с помощью команды или PROMPT_COMMAND перестанет работать, так как подсказка печатается после всех них. Поэтому я предпочитаю сохранять простую подсказку при тестировании заголовков (PS1=$; unset PROMPT_COMMAND).

10
ответ дан 23 November 2019 в 00:07

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

PROMPT_COMMAND=
echo -en "\033]0;New terminal title\a"
5
ответ дан 23 November 2019 в 00:07

Инструкции

  1. Добавляют settitle () к Вашему .bashrc.
  2. source ~/.bashrc
  3. settitle Banana
<час>

settitle ()

function settitle()
{
    if [ $# -eq 0 ]
        then
        eval set -- "\\u@\\h: \\w"
    fi

    case $TERM in
        xterm*) local title="\[\033]0;$@\007\]";;
        *) local title=''
    esac
    local prompt=$(echo "$PS1" | sed -e 's/\\\[\\033\]0;.*\\007\\\]//')
    PS1="${title}${prompt}"
}
3
ответ дан 23 November 2019 в 00:07

Одним из решений может быть установка последней версии tmux .

tmux позволяет задавать заголовки для каждой панели, которые активируются этой командой:

tmux set -g pane-border-status top

Они также могут отображаться внизу.

Затем заголовки устанавливаются с помощью escape-последовательности:

printf '\033]2│;%s\033\\' 'My Pane Title'

Каждая панель может иметь свой собственный заголовок, и все заголовки отображаются постоянно.

Панели tmux будут выглядеть следующим образом:

──0 "My Pane Title"──────┬──1 "Another Pane"───────
>                        │>

Это было протестировано на linux mint 18.2 (как Ubuntu) с tmux 2.8. Инсталляция была из тарбола.

Если вы хотите повысить производительность своего терминала, tmux также предлагает множество других функций.

0
ответ дан 23 November 2019 в 00:07

Можно сделать это, или в CLI или в GUI (я предполагаю, что Вы используете терминал гнома, можно сделать для других, просто заменяют название приложения):

В Выполнении CLI команда:

gconftool-2 --set /apps/gnome-terminal/profiles/Default/title --type=string "New Terminal Name"

Примечание: новое имя применяется ко всем экземплярам терминальных вкладок, а не для единственной текущей вкладки.

enter image description here

Или от GUI:

Войдите в Меню: Терминал-> Заголовок Набора-> Входит, новый заголовок затем сохраняют.


Теперь, Почему Ваша команда не работает?

Необходимо добавить эту строку к .bashrc файл и не непосредственно к Вашему терминалу.

gedit .bashrc

Добавьте эту строку:

PROMPT_COMMAND='echo -en "\033]0;New terminal title\a"'

Затем сохраните и получите bashrc файл.

source .bashrc
3
ответ дан 23 November 2019 в 00:07

На основе ответа @muru

PS1 устанавливает заголовок, любая попытка установить заголовок с помощью команды или PROMPT_COMMAND перестанет работать, так как подсказка печатается после всех них

Это работало в моем Элементарном S.O:

PS1='\u:\W\$ '
PROMPT_COMMAND='echo -en "\033]0;New terminal title\a"'

Я выполняю это на каждой новой вкладке:

tab 1

tab 2

И поскольку предыдущее изображение показывает, у меня есть несколько вкладок с уникальным именем.

С 16.04.1 Ubuntu

1
ответ дан 23 November 2019 в 00:07

Используя удар, wmctrl, xprop, PS

1) Для продолжительной активной программы:

Например, запустите программу (рейнджер), работающий в терминале, запущенном с рабочего стола, измените заголовок, однажды, после некоторой задержки (5 секунд), когда программа запустится:

startranger.sh:

#!/bin/bash
/usr/local/bin/changetitle.sh 5 ranger
/usr/local/bin/ranger

changetitle.sh:

#!/bin/bash
delay="$1"
shift
wintitle="$*"
winid=`xprop -root | grep _NET_ACTIVE_WINDOW | head -1 | awk '{print $5}' | sed 's/,//' | sed 's/^0x/0x0/'`
/bin/bash -c "sleep $delay; wmctrl -i -r $winid -N \"$wintitle\"" &

2) Если Вы выполняете терминальный сеанс, не запуская активную программу, обновляете заголовок на цикле, который заканчивается, когда Ваш терминал выходит:

changetitleloop.sh 1 maintenance for server

рабочее вышеупомянутое обновит заголовок текущего терминала каждая 1 секунда даже если Вы cd (может изменить его многократно), с помощью:

changetitleloop.sh

#!/bin/bash
interval="$1"
shift
wintitle="$*"
termpid="$(ps -p $$ -o ppid= | sed -e 's/^[ \t]*//')"
winid=`xprop -root | grep _NET_ACTIVE_WINDOW | head -1 | awk '{print $5}' | sed 's/,//' | sed 's/^0x/0x0/'`
/bin/bash -c "ss=\$$; echo \$ss > /tmp/term-$termpid.pid; while x=\$(wmctrl -i -r $winid -N \"$wintitle\"); ret=\$?; sleep $interval; owner=\$(cat /tmp/term-$termpid.pid); [ \$ret -eq 0 ] && [ \$ss -eq \$owner ]; do continue; done;" &
1
ответ дан 23 November 2019 в 00:07

Этот поток может быть немного старым, но здесь является решением, которое работает на меня:

https://blog.programster.org/ubuntu-16-04-set-terminal-title

Просто отредактируйте свой файл $HOME/.bashrc и добавьте следующую функцию:
заголовок набора () {
$PS1 ORIG=
ЗАГОЛОВОК = "\e] 2; $ \a"
$ PS1= {ORIG} $ {ЗАГОЛОВОК}
}

Теперь каждый раз, когда Вы хотите установить заголовок своего терминала, просто введите что-то как:
заголовок набора "мой потрясающий терминальный заголовок"

3
ответ дан 23 November 2019 в 00:07

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

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