Подтвердить что ты не робот

Установить название экрана из shellscript

Можно ли установить заголовок экрана с помощью сценария оболочки?

Я думал о чем-то вроде отправки клавишных команд ctrl + A shift - A Name enter

Я около часа искал, как эмулировать нажатия клавиш в скрипте оболочки, но не нашел ответа.

4b9b3361

Ответ 1

Вы можете установить заголовок экрана /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 ниже.

Ответ 2

От 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 установлены правильно. Необходимые параметры для эхо может варьироваться в зависимости от оболочки (см. примеры ниже).

Информация, которая может время жизни оболочки, такое как ток рабочий каталог, эти экраны действительно нужно применять каждый раз подсказка меняется. Таким образом, строка обновляется с каждой командой вы выпускаете и можете отслеживать информации, такой как текущая работа каталог, имя пользователя, имя хоста и т.д. Некоторые оболочки предоставляют специальные функции для этого некоторые не делают, и мы необходимо вставить последовательности заголовков непосредственно в строку подсказки. Эта иллюстрируется в следующем разделе.

Ответ 3

Ниже перечислены другие способы 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"

Ответ 4

Попробуйте приведенные ниже команды, нет необходимости редактировать любой файл или конфигурацию, например ~/.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\$ '

Ответ 5

set_screen_title ()
{
    echo -ne "\ek$1\e\\"
}

Ответ 6

Вы также можете вызвать экран и сообщить ему, чтобы установить заголовок:

screen -X title "new title"

Если вы находитесь в окне экрана, оно будет устанавливать это имя окна. Если вы не находитесь на экране, он установит самое последнее открытое имя окна.

Ответ 7

Чтобы добавить в ответ 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'

Ответ 9

Реальное простое решение (после того, как я попробовал все, что я видел до сих пор)... если у вас есть система типа Ubuntu/Mint, где вы можете установить "xtitle":

sudo apt-get install xtitle

после этого вам просто нужно использовать команду: xtitle Мой заголовок

и вы получите: "Терминал - мой заголовок"

Ответ 10

 # add the following in your ~/.bashrc or ~/.bash_profile
 PROMPT_COMMAND='printf "\033]0;%[email protected]%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'

или даже лучше скопировать всю концепцию для настройки ваших конфигураций bash между множеством хостов из здесь

Ответ 11

Моим решением этой проблемы было создание скрипта bash и добавление его в мой файл ~/.bashrc:

set-title() {
  ORIG==$PS1
  TITLE="\e];[email protected]\a"
  PS1=${ORIG}${TITLE}
}

Теперь, когда я нахожусь в любом сеансе оболочки bash, я набираю "set-title wanted_title", и он меняется на "требуемый заголовок". Это работает для нескольких версий Ubuntu, в настоящее время на Kinetic 16.04

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

Ответ 12

Я получил это решение, экспериментируя с другими, например, @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\$ '