Можно ли установить заголовок экрана с помощью сценария оболочки?
Я думал о чем-то вроде отправки клавишных команд ctrl + A shift - A Name
enter
Я около часа искал, как эмулировать нажатия клавиш в скрипте оболочки, но не нашел ответа.
Можно ли установить заголовок экрана с помощью сценария оболочки?
Я думал о чем-то вроде отправки клавишных команд ctrl + A shift - A Name
enter
Я около часа искал, как эмулировать нажатия клавиш в скрипте оболочки, но не нашел ответа.
Вы можете установить заголовок экрана /xterm, используя следующие строки:
#!/bin/bash
mytitle="Some title"
echo -e '\033k'$mytitle'\033\\'
[ОБНОВЛЕНИЕ] - по запросу Я также включаю решение, предложенное @Espo ниже:
В зависимости от вашей версии xterm или вашего дистрибутива Linux строка выше может работать или не работать, и вы можете попробовать xterm-defaults:
#!/bin/bash
mytitle="Some title"
echo -e '\033]2;'$mytitle'\007'
Подробнее о деталях см.: http://www.faqs.org/docs/Linux-mini/Xterm-Title.html#s3 или см. ответ на @Espo ниже.
От http://www.faqs.org/docs/Linux-mini/Xterm-Title.html#s3
escape-последовательности xterm
Заголовки окон и значков могут быть изменены в бегущей xterm с помощью XTerm escape-последовательностей. Следующие последовательности полезны в этом отношении:
ESC]0;stringBEL
- Установить имя значка и заголовок окна в строкуESC]1;stringBEL
- Установить имя значка в строкуESC]2;stringBEL
- Установить заголовок окна в строкугде ESC - символ escape (\ 033), а BEL - символ колокола (\ 007).
Печать одной из этих последовательностей внутри xterm вызовет окно или название значка, которое нужно изменить.
Примечание: эти последовательности применимы к большинству xterm производные, такие как nxterm, color-xterm и rxvt. Другие терминалы типы часто используют разные escape-последовательности; видеть приложение для примеров. Для полный список escape-последовательностей xterm см. файл ctlseq2.txt, который появляется с распределением xterm или xterm.seq, который поставляется с rxvt распределение.
Печать управляющих последовательностей
Для информации, которая является постоянной на протяжении всего срока службы этой оболочки, таких как хост и имя пользователя, он будет достаточно просто повторить побег string в файле оболочки rc:
echo -n "\033]0;${USER}@${HOST}\007"
должен создать название типа имя_пользователя @hostname, при условии, что оболочка переменные $USER и $HOST установлены правильно. Необходимые параметры для эхо может варьироваться в зависимости от оболочки (см. примеры ниже).
Информация, которая может время жизни оболочки, такое как ток рабочий каталог, эти экраны действительно нужно применять каждый раз подсказка меняется. Таким образом, строка обновляется с каждой командой вы выпускаете и можете отслеживать информации, такой как текущая работа каталог, имя пользователя, имя хоста и т.д. Некоторые оболочки предоставляют специальные функции для этого некоторые не делают, и мы необходимо вставить последовательности заголовков непосредственно в строку подсказки. Эта иллюстрируется в следующем разделе.
Ниже перечислены другие способы script переименования названий экранов:
Добавление следующих параметров в .ssh/config
автоматически устанавливает заголовок экрана при входе в систему с использованием SSH:
Host *
PermitLocalCommand yes
LocalCommand [ "$TERM" == 'screen' ] && echo -ne "\033k%h\033\\"
Вместо %h
, который представляет имя хоста машины, с которой вы соединяетесь, вы можете использовать %n
, который является фактическим именем/псевдонимом, который вы использовали для подключения к машине.
ПРИМЕЧАНИЕ. Для использования параметров Localhost% n и% h необходимо использовать OpenSSH >= v5.1. Зайдите в "man ssh_config" для получения дополнительной информации о LocalCommand.
Чтобы автоматически вернуть заголовок обратно к названию имени хоста localhost, после закрытия сеанса SSH вы можете добавить escape-последовательность к переменной приглашения PS1
в .bashrc
:
export PS1='you_favorite_PS1_here'
if [ "$TERM" == 'screen' ]; then
export PS1=${PS1}'\[\033k\h\033\\\]'
fi
Эти трюки особенно полезны при использовании конфигурации .screenrc
, которая показывает вам, на какой вкладке экрана вы сейчас работаете. Добавьте следующее: .screenrc
, чтобы это получилось:
caption always "%{= kY}%-w%{= Yk}%n %t%{-}%+w%{ kG} %-= @%H - %LD %d %LM - %c"
Попробуйте приведенные ниже команды, нет необходимости редактировать любой файл или конфигурацию, например ~/.bashrc. Может использоваться во время выполнения.
Установите статический текст как заголовок: (My Title)
export PS1='\[\e]0;My Title\a\]${debian_chroot:+($debian_chroot)}\[email protected]\h:\w\$ '
Задайте локальную/глобальную переменную как заголовок: ($ USER)
export PS1='\[\e]0;$USER\a\]${debian_chroot:+($debian_chroot)}\[email protected]\h:\w\$ '
Задайте вывод команды как заголовок: (имя хоста)
export PS1='\[\e]0;`hostname`\a\]${debian_chroot:+($debian_chroot)}\[email protected]\h:\w\$ '
Установите значение по умолчанию (Верните назад):
export PS1='\[\e]0;\[email protected]\h: \w\a\]${debian_chroot:+($debian_chroot)}\[email protected]\h:\w\$ '
set_screen_title ()
{
echo -ne "\ek$1\e\\"
}
Вы также можете вызвать экран и сообщить ему, чтобы установить заголовок:
screen -X title "new title"
Если вы находитесь в окне экрана, оно будет устанавливать это имя окна. Если вы не находитесь на экране, он установит самое последнее открытое имя окна.
Чтобы добавить в ответ Espo, escape-последовательности xterm также могут быть применены к переменной Bash PS1
ESC]0;stringBEL -- Set icon name and window title to string
ESC]1;stringBEL -- Set icon name to string
ESC]2;stringBEL -- Set window title to string
Пример
PS1='\e]0;string\a'
Чтобы включить автоматическое обновление заголовков при переходе по ssh, добавьте это в ~/.bashrc
:
ssh() {
echo -n -e "\033k$1\033\\"
/usr/bin/ssh "[email protected]"
echo -n -e "\033k'hostname -s'\033\\"
}
echo -n -e "\033k'hostname -s'\033\\"
См. Http://linuxepiphany.blogspot.com.ar/2010/05/good-screenrc-config-setup.html.
Реальное простое решение (после того, как я попробовал все, что я видел до сих пор)... если у вас есть система типа Ubuntu/Mint, где вы можете установить "xtitle":
sudo apt-get install xtitle
после этого вам просто нужно использовать команду: xtitle Мой заголовок
и вы получите: "Терминал - мой заголовок"
# add the following in your ~/.bashrc or ~/.bash_profile
PROMPT_COMMAND='printf "\033]0;%[email protected]%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
или даже лучше скопировать всю концепцию для настройки ваших конфигураций bash между множеством хостов из здесь
Моим решением этой проблемы было создание скрипта bash и добавление его в мой файл ~/.bashrc:
set-title() {
ORIG==$PS1
TITLE="\e];[email protected]\a"
PS1=${ORIG}${TITLE}
}
Теперь, когда я нахожусь в любом сеансе оболочки bash, я набираю "set-title wanted_title", и он меняется на "требуемый заголовок". Это работает для нескольких версий Ubuntu, в настоящее время на Kinetic 16.04
Я получил это решение отсюда. Я искал это снова, не мог найти это и думал, что я отправлю это здесь для любого заинтересованного.
Я получил это решение, экспериментируя с другими, например, @flurin-arner. Я запустил набор @weston-ganger set-title(). Я также использовал предложение @imgx64 PROMPT_DIRTRIM. Я также использую подсказку @itseranga git branch, хотя это не имеет никакого отношения к вопросу, который показывает, что вы можете сделать с подсказкой.
Сначала, как показано Уэстон и выше
TITLE="\[\e]2;$*\a\]"
может использоваться для ручной установки заголовка терминала, "$ *" - это ввод командной строки, но не то, что мы хотим.
Во-вторых, как я уже сказал, я также добавляю git branch к моей подсказке, опять же не часть вопроса.
export PROMPT_DIRTRIM=3
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\[email protected]\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "
В-третьих, экспериментально я скопировал код TITLE выше, установил $ * в фиксированную строку и попробовал это:
see: \[\e]2;'SomeTitleString'\a\]
export PS1="\[email protected]\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\]\[\e]2;'SomeTitleString'\a\] $ "
Это имело желаемый эффект! В конечном счете, я хотел использовать базовый путь в качестве заголовка. PS1 Params показывает, что \W является базовым путем, поэтому мое решение таково:
export PS1="\[email protected]\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\]\[\e]2;\W\a\] $ "
без ветки git:
export PS1="\[email protected]\h \[\033[32m\]\w\[\033[33m\]\[\033[00m\]\[\e]2;\W\a\] $ "
в результате появляется приглашение с git-branch:
[email protected] ~/.../StudyJava (master) $
в результате появляется приглашение без parse_git_branch:
[email protected] ~/.../StudyJava $
где pwd дает
/home/user/somedir1/otherdir2/StudyJava
и название терминала
StudyJava
ПРИМЕЧАНИЕ. Начиная с @seff, я по сути заменяю "My Title" на "\ W"
export PS1='\[\e]0;My Title\a\]${debian_chroot:+($debian_chroot)}\[email protected]\h:\w\$ '