Set screen-title from shellscript

Czy Można ustawić Screen-Title używając skryptu powłoki?

Myślałem o czymś takim jak wysłanie komend klawiszowych Strg+A Shift-A Name <Enter>

Szukałem około godziny, jak emulować naciśnięcia klawiszy w skrypcie powłoki, ale nie znalazłem odpowiedzi.

Dzięki za pomoc!

Beerweasle

Author: Thomas K, 2009-11-06

9 answers

Możesz ustawić tytuł ekranu / xterm używając następujących linii:

#!/bin/bash

mytitle="Some title"
echo -e '\033k'$mytitle'\033\\'

[UPDATE] - na życzenie dołączam również rozwiązanie zaproponowane przez @ Espo poniżej:

W zależności od wersji xterm lub dystrybucji Linuksa powyższa linia może lub nie może działać i możesz spróbować xterm-defaults:

#!/bin/bash

mytitle="Some title"
echo -e '\033]2;'$mytitle'\007'

Aby uzyskać więcej informacji, zobacz: http://www.faqs.org/docs/Linux-mini/Xterm-Title.html#s3 lub zapoznaj się z odpowiedzią @Espo poniżej.

 45
Author: Shirkrin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-24 07:43:16

Z http://www.faqs.org/docs/Linux-mini/Xterm-Title.html#s3

Sekwencje ucieczki Xterm

Tytuły okien i ikon mogą zostać zmienione w uruchomionym xterm za pomocą XTerm sekwencje ucieczki. Następujące sekwencje są użyteczne pod tym względem:

  • ESC]0;stringBEL -- Ustaw nazwę ikon i tytuł okna na string
  • ESC]1;stringBEL -- Ustaw nazwę ikony na string
  • ESC]2;stringBEL -- Ustaw tytuł okna na string

Gdzie ESC jest postacią ucieczki (\033), a BEL jest znakiem dzwonu (\007).

Drukowanie jednej z tych sekwencji w xterm spowoduje okno lub tytuł ikony do zmiany.

Uwaga: sekwencje te dotyczą większości pochodne xterm, takie jak nxterm, kolor-xterm i rxvt. Inny terminal typy często używają różnych ucieczek; Zobacz też załącznik do przykładów. Na pełna lista sekwencji xterm escape zobacz plik ctlseq2.txt, który przychodzi z xterm dystrybucja, lub xterm.seq, który pochodzi z rxvt Dystrybucja.

Drukowanie sekwencji ucieczki

Dla informacji, które są stałe przez cały okres istnienia tej powłoki, takich jak host i nazwa użytkownika, będzie / align = "left" / łańcuch w pliku rc powłoki:

    echo -n "\033]0;${USER}@${HOST}\007"

Powinien produkować tytuł jak username@hostname, zakładając powłokę zmienne $USER I $HOST są ustawione prawidłowo. Wymagane opcje dla echo maja różnią się w zależności od powłoki (patrz przykłady poniżej).

Dla informacji, które mogą ulec zmianie podczas żywotność powłoki, np. prąd working directory, te ucieczki naprawdę trzeba stosować za każdym razem monit się zmienia. W ten sposób ciąg jest aktualizowany przy każdym poleceniu wystawiasz i możesz śledzić informacje takie jak bieżąca praca katalog, nazwa użytkownika, nazwa hosta itp. Niektóre powłoki zapewniają specjalne funkcje w tym celu niektórzy nie i my trzeba wstawić tytuł sekwencje bezpośrednio do ciągu zachęty. To jest zilustrowane w następnej sekcji.

 19
Author: Espo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-06 13:49:53

Poniżej przedstawiono inne sposoby zmiany nazw tytułów ekranów:

Dodanie następujących ustawień do .ssh/config ustawia tytuł ekranu automatycznie po zalogowaniu się do systemu przy użyciu SSH:

Host *
  PermitLocalCommand yes
  LocalCommand [ "$TERM" == 'screen' ] && echo -ne "\033k%h\033\\" 

Zamiast %h, która reprezentuje nazwę hosta komputera, z którym się łączysz, możesz użyć %n, która jest rzeczywistą nazwą / aliasem używanym do połączenia z komputerem.

Uwaga: Aby móc używać parametrów localhost %N I %h, potrzebujesz OpenSSH >= v5.1. Sprawdź 'man ssh_config', aby uzyskać więcej informacji na temat polecenia lokalnego.

Aby automatycznie przywrócić tytuł, z powrotem do nazwy hosta localhost, po zamknięciu sesji SSH, możesz dodać sekwencję specjalną do zmiennej prompt PS1 w .bashrc:

export PS1='you_favorite_PS1_here'
if [ "$TERM" == 'screen' ]; then
    export PS1=${PS1}'\[\033k\h\033\\\]'
fi

Te sztuczki są szczególnie przydatne podczas korzystania z konfiguracji .screenrc, która pokazuje, na jakim ekranie 'zakładka' aktualnie pracujesz. Dodaj coś podobnego do .screenrc, aby to zadziałało:

caption always "%{= kY}%-w%{= Yk}%n %t%{-}%+w%{ kG} %-= @%H - %LD %d %LM - %c"
 11
Author: Johnny Halfmoon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-19 22:38:08

Wypróbuj poniższe polecenia, nie musisz edytować żadnego pliku lub konfiguracji jak ~/.bashrc, może być używany w czasie wykonywania.

Ustaw statyczny tekst jako tytuł: (mój tytuł)

export PS1='\[\e]0;My Title\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

Ustaw zmienną lokalną / globalną jako tytuł: ($USER)

export PS1='\[\e]0;$USER\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

Set command output as title: (hostname)

export PS1='\[\e]0;`hostname`\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

Ustaw na wartość domyślną (Cofnij):

export PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
 8
Author: Seff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-20 01:30:36
set_screen_title ()
{
    echo -ne "\ek$1\e\\"
}
 7
Author: Randy Proctor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-06 13:49:17

Możesz również wywołać screen i powiedzieć mu, aby ustawił tytuł:

screen -X title "new title"

Jeśli jesteś w oknie ekranu, ustawi nazwę tego okna. Jeśli nie ma Cię na ekranie, ustawi nazwę ostatnio otwartego okna.

 3
Author: idbrii,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-24 22:14:32

Aby dodać do odpowiedzi Espo, sekwencje escape xterm można również zastosować do zmiennej 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

Przykład

PS1='\e]0;string\a'
 2
Author: Steven Penny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-04 22:17:32

Aby włączyć automatyczną aktualizację tytułu podczas przeskakiwania z ssh, dodaj to do

~/.bashrc

ssh() {
echo -n -e "\033k$1\033\\"
/usr/bin/ssh "$@"
echo -n -e "\033k`hostname -s`\033\\"
}
echo -n -e "\033k`hostname -s`\033\\"

Zobacz http://linuxepiphany.blogspot.com.ar/2010/05/good-screenrc-config-setup.html

 1
Author: mijhael3000,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-09 19:06:05
 # add the following in your ~/.bashrc or ~/.bash_profile
 PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'

Lub jeszcze lepiej Skopiuj całą koncepcję dostosowywania konfiguracji bash między wieloma hostami z tutaj

 0
Author: Yordan Georgiev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-28 14:36:23