it-swarm.com.de

Definir o título da tela do Shell script

Möchten Sie die Skript-Shell endgültig verwenden?

Eu pensei em algo como enviar os comandos principaisctrl+Ashift-ANamename__enter

Eu procurei por cerca de uma hora sobre como emular as teclas digitadas em um script Shell, mas não foundrei a resposta.

47
Beerweasle

Sie können den Bildschirm-/Xterm-Titel mithilfe der folgenden Zeilen festlegen: 

#!/bin/bash

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

[UPDATE] - auf Anfrage füge ich auch die von @Espo vorgeschlagene Lösung hinzu:

Abhängig von Ihrer Xterm-Version oder Ihrer Linux-Distribution funktioniert die obige Zeile möglicherweise nicht und Sie können die Xterm-Defaults ausprobieren:

#!/bin/bash

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

Weitere Informationen zu den Details finden Sie unter: http://www.faqs.org/docs/Linux-mini/Xterm-Title.html#s3 .

46
Shirkrin

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

xterm-Escape-Sequenzen

Fenster- und Symboltitel können geändert werden in einem laufenden xterm mit XTerm Fluchtsequenzen. Folgende Sequenzen sind in dieser Hinsicht nützlich:

  • ESC]0;stringBEL - Setzen Sie den Symbolnamen und den Fenstertitel auf string
  • ESC]1;stringBEL - Setzen Sie den Symbolnamen auf string
  • ESC]2;stringBEL - Fenstertitel auf Zeichenfolge setzen

dabei ist ESC das Escape-Zeichen (\ 033) und BEL ist das Glockenzeichen (\ 007).

Drucken einer dieser Sequenzen innerhalb von das xterm verursacht das Fenster oder Symboltitel, der geändert werden soll.

Hinweis: Diese Sequenzen gelten für die meisten xterm-Ableitungen, wie nxterm, color-xterm und rxvt. Anderes Terminal Typen verwenden oft unterschiedliche Fluchten; sehen der Anhang für Beispiele. Für die vollständige Liste der xterm-Escape-Sequenzen siehe die Datei ctlseq2.txt. mit der Xterm-Distribution oder xterm.seq, das im Lieferumfang von rxvt .__ enthalten ist. Verteilung.

Escape-Sequenzen drucken

Für Informationen, die konstant sind während der gesamten Lebensdauer dieser Shell, wie Host und Benutzername, wird es es genügt, um die Flucht einfach zu wiederholen Zeichenfolge in der Shell-RC-Datei:

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

sollte einen Titel wie .__ erzeugen. Benutzername @ Hostname, unter der Annahme der Shell Die Variablen $ USER und $ Host werden gesetzt korrekt. Die erforderlichen Optionen für Das Echo kann je nach Shell variieren (siehe Beispiele unten).

Für Informationen, die sich während .__ ändern können. die Lebensdauer der Shell, z. B. aktuell Arbeitsverzeichnis, entgeht diese müssen wirklich jedes Mal angewendet werden Die Aufforderung ändert sich. Auf diese Weise die String wird mit jedem Befehl aktualisiert Sie geben aus und können .__ verfolgen. Informationen wie aktuelles Arbeiten Verzeichnis, Benutzername, Hostname, etc . Einige Shells bieten spezielle Funktionen einige tun dies nicht und wir müssen die Titelsequenzen einfügen direkt in die Eingabeaufforderung. Diese wird im nächsten Abschnitt veranschaulicht.

19
Espo

Folgende Möglichkeiten stehen zur Verfügung, um das Umbenennen von Bildschirmtiteln per Skript durchzuführen:

Durch Hinzufügen der folgenden Einstellungen zu .ssh/config wird der Bildschirmtitel beim Anmelden an einem System mithilfe von SSH automatisch festgelegt:

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

Anstelle von %h, der den Hostnamen des Computers darstellt, mit dem Sie eine Verbindung herstellen, können Sie %n verwenden. Dies ist der tatsächliche Name/Alias, mit dem Sie eine Verbindung zum Computer herstellen.

HINWEIS: Sie benötigen OpenSSH> = v5.1, um die Localhost-Parameter% n und% h verwenden zu können. Unter 'man ssh_config' finden Sie weitere Informationen zu LocalCommand.

Um den Titel automatisch auf den Hostnamen des localhost zurückzusetzen, können Sie nach dem Schließen der SSH-Sitzung Ihrer Eingabeaufforderungsvariablen PS1 in .bashrc eine Escape-Sequenz hinzufügen.

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

Diese Tricks sind besonders nützlich, wenn Sie eine .screenrc config verwenden, die Ihnen zeigt, auf welcher Bildschirmseite Sie gerade arbeiten. Fügen Sie .screenrc etwas wie das Folgende hinzu, damit das funktioniert:

caption always "%{= kY}%-w%{= Yk}%n %t%{-}%+w%{ kG} %-= @%H - %LD %d %LM - %c"
11
Johnny Halfmoon

Führen Sie die folgenden Befehle aus. Sie müssen keine Datei oder Konfiguration wie ~/.bashrc bearbeiten. Kann zur Laufzeit verwendet werden.

Festlegen von statischem Text als Titel: (Mein Titel)

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

Lokale/globale Variable als Titel setzen: ($ USER)

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

Befehlsausgabe als Titel setzen: (Hostname)

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

Auf Standard setzen (Zurücksetzen):

export PS1='\[\e]0;\[email protected]\h: \w\a\]${debian_chroot:+($debian_chroot)}\[email protected]\h:\w\$ '
10
Seff
set_screen_title ()
{
    echo -ne "\ek$1\e\\"
}
7
Randy Proctor

Sie können auch den Bildschirm aufrufen und ihm mitteilen, einen Titel festzulegen:

screen -X title "new title"

Wenn Sie sich in einem Bildschirmfenster befinden, wird der Name dieses Fensters festgelegt. Wenn Sie sich nicht im Bildschirm befinden, wird der Name des zuletzt geöffneten Fensters festgelegt.

3
idbrii

Um Espos Antwort hinzuzufügen, können die Xterm-Escape-Sequenzen auch auf die Bash-Variable PS1 angewendet werden

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

Beispiel

PS1='\e]0;string\a'
2
Steven Penny

Um die automatische Titelaktualisierung beim Springen mit ssh zu aktivieren, fügen Sie Folgendes zu ~/.bashrc hinzu:

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\\"

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

1
mijhael3000

Eu tenho essa solução de experimentar com os outros, como @ flurin-arner und comecei o @ weston-ganger set-title () . Eu também usei @ imgx64 Prompt_DIRTRIM sugestão. Eu também estou usando o @itseranga git branch Prompt , Embora ist ein Tool, mit dem Sie Fragen und Antworten zur Eingabeaufforderung beantworten können.

Primeiro como mostrado por weston e acima

 TITLE="\[\e]2;$*\a\]"

hier können Sie die endgültige Bedienungsanleitung für das Terminal, "$ *" und die Eingabe des Kommandos sowie weitere Informationen eingeben.

2º, como declarado, também estou adicionando o git branch u.

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\] $ "

3º, por experiência copiei o código TITLE acima, coloquei o $ * em string fixa e tentei isso:

see: \[\e]2;'SomeTitleString'\a\]

export PS1="\[email protected]\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\]\[\e]2;'SomeTitleString'\a\] $ "

Isso teve o efeito desejado! Finalmente, eu queria o caminho base como meu título. PS1 Params Hier können Sie die Basis mit den folgenden Lösungsoptionen auswählen:

export PS1="\[email protected]\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\]\[\e]2;\W\a\] $ "

sem o ramo git:

export PS1="\[email protected]\h \[\033[32m\]\w\[\033[33m\]\[\033[00m\]\[\e]2;\W\a\] $ "

resultando em um Prompt com git-branch:

[email protected] ~/.../StudyJava (master) $  

resultando em um Prompt sem parse_git_branch:

   [email protected] ~/.../StudyJava $  

onde pwd dá

/home/user/somedir1/otherdir2/StudyJava

e título do terminal

StudyJava

NOTA: De @seff acima eu estou esscialmente substitindo o "Meu Título" por "\ W"

export PS1='\[\e]0;My Title\a\]${debian_chroot:+($debian_chroot)}\[email protected]\h:\w\$ '
0
mancocapac
 # add the following in your ~/.bashrc or ~/.bash_profile
 Prompt_COMMAND='printf "\033]0;%[email protected]%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'

oder noch besser das gesamte Konzept zum Anpassen Ihrer bash-Konfigurationen zwischen vielen Hosts von hier kopieren

0
Yordan Georgiev

Meine Lösung für dieses Problem bestand darin, ein Bash-Skript zu erstellen und es meiner ~/.bashrc-Datei hinzuzufügen:

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

Wenn ich mich jetzt in einer bash-Shell-Sitzung befinde, tippe ich "set-title wanted_title" ein und ändert sich in "gewünschter Titel". Dies funktioniert für mehrere Versionen von Ubuntu, derzeit auf Kinetic 16.04

Ich habe diese Lösung von hier bekommen. Ich suchte es wieder, konnte es nicht finden und dachte, ich würde es hier für alle Interessierten posten. 

0
Flurin Arner