Bash - Aktualisieren Sie den Terminaltitel, indem Sie einen zweiten Befehl ausführen
Auf meinem terminal in Ubuntu, habe ich oft laufen Programme, die Sie laufen zu halten für eine lange Zeit. Und da gibt es eine Menge von diesen Programmen, die ich immer vergessen, das terminal ist für das Programm, es sei denn, ich tab durch alle jene. Also ich wollte einen Weg finden, um zu aktualisieren meine terminal Titel den Namen des Programms, immer wenn ich einen Befehl auszuführen. Ich will nicht, es zu tun manuell.
Verwende ich gnome-terminal, aber die Antwort sollte nicht wirklich darauf angewiesen. Im Grunde, Wenn ich in der Lage bin, zu laufen, einen zweiten Befehl, dann kann ich das einfach verwenden Sie gconftool-Befehl zum update der Titel. Ich hatte gehofft, einen Weg zu finden, zu erfassen, den Befehl in der bash und aktualisieren Sie die Titel nach jedem Befehl. Wie mache ich das?
InformationsquelleAutor der Frage Neo | 2011-02-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe einige Antworten für Sie 🙂 Du hast Recht, dass es nicht darauf ankommt, dass man mit gnome-terminal, aber es ist nicht egal, welche Kommando-shell, die Sie verwenden. Dies ist viel einfacher, in
zsh
aber in dem, was folgt, ich nehme an, Sie sind mitbash
ist, und dass es eine relativ neue version (> 3.1).Zunächst:
Gibt es eine Umgebungsvariable, die mehr-oder-weniger, was Sie wollen -
$BASH_COMMAND
. Es gibt nur einen kleinen Haken, und das ist, dass es zeigt nur den letzten Befehl in einer pipe. Ich bin mir nicht 100% sicher, was es tun wird, mit Kombinationen von Unterschalen 🙂Ich habe darüber nachgedacht, und jetzt, dass ich verstehe, was Sie wollen zu tun, ich erkannte das eigentliche problem ist, dass Sie brauchen, um zu aktualisieren, die Titel vor jeden Befehl. Dies bedeutet, dass die
$PROMPT_COMMAND
und$PS1
environment-Variablen werden als mögliche Lösungen, da Sie nur ausgeführt nach den Befehl gibt.In
bash
die einzige Möglichkeit die ich denken kann, zu erreichen, was Sie wollen, ist (ab)die Nutzung der DEBUG-SIGNAL. Also hier ist eine Lösung-stick am Ende Ihrer.bashrc
:Zu bekommen, um das problem mit Rohren, ich habe Herumspielen mit diesem:
aber ich nicht Versprechen, es ist perfekt!
InformationsquelleAutor der Antwort simon
Versuchen Sie dies:
Dank der
history 1
es funktioniert auch mit komplizierten Ausdrücken wie:Für die Ansätze, die sich auf $BASH_COMMAND oder $@ fail. Zum Beispiel simon's zeigt:
Dank Gilles und simon für die Bereitstellung inspiration.
InformationsquelleAutor der Antwort John Mellor
Ich sehen, was stoutie versucht zu tun, außer, dass es viel mehr Arbeit als nötig. Und nicht dazu führen, dass alle Arten von anderen potentiell schlechten Dinge, die kann auftreten als eine Folge der Neudefinition 'cd' und setzen an alle, die testen nur auf Verzeichnisse ändern. Bash verfügt über integrierte Unterstützung für die meisten dieser.
Können Sie dieses in Ihrem .bashrc überall, nachdem Sie Ihre aktuelle PS1 prompt (so einfach stellt es)
InformationsquelleAutor der Antwort UpAndAdam
Mache ich etwas, wie dieses, zu zeigen, dass meine
pwd
im Titel, die geändert werden könnten, zu tun, was Sie tun möchten, mit dem Titel:Ich nur warf diese in meine
~/.bash_aliases
.Update
Lief ich in seltsamen Fehler mit meiner ursprünglichen Antwort. Ich landete Kommissionierung neben der Standard-Ubuntu-PS1 und bricht es in Teile, nur zu erkennen, eines der Teile, war der Titel:
Ohne zu brechen in Variablen, würde es so Aussehen:
InformationsquelleAutor der Antwort Stoutie
Der OP fragte nach
bash
aber andere vielleicht interessiert sein, zu erfahren, dass (wie oben erwähnt) dies ist in der Tat sehr viel einfacher mit derzsh
shell. Beispiel:In
preexec
$1
enthält den Befehl so eingegeben werden (erfordert die shell-Historie aktiviert, das scheint zu sein, eine faire Annahme),$2
den erweiterten Befehl (shell-Aliase etc.) und$3
"sehr erweitert" - Befehl (shell-Funktion stellen). (mehr)InformationsquelleAutor der Antwort Søren Løvborg
Können Sie einrichten
bash
solche, die es sendet eine bestimmte escape-Sequenz an das terminal jedes mal, wenn es startet ein externes Programm. Wenn Sie die escape-Sequenz, die terminals verwenden, um aktualisieren Sie Ihren Titel, der Ihr problem gelöst werden sollte.Habe ich verwendet, bevor Sie, damit ich weiß, es ist möglich. aber ich kann mich nicht erinnern aus der Spitze von meinem Kopf und nicht die Zeit haben, die Forschung zu den details jetzt, aber.
InformationsquelleAutor der Antwort ndim
Basiert auf der Notwendigkeit, position auto Kitt windows ich habe meine modifizierten
/etc/bash.bashrc
Datei auf einem Debian/Ubuntu system. Ich habe den gesamten Inhalt auf Vollständigkeit, aber das entsprechende bit, beginnt auf der# Display command ...
Kommentar-Zeile.InformationsquelleAutor der Antwort Daniel Sokolowski
Ich getestet habe, drei-Methode, alles OK ist, verwenden Sie eine für Ihr Vergnügen.
bitte beachten Sie, wenn Sie $BASH_COMMAND, es nicht zu erkennen, bash-alias, und verwenden Sie PROMPT_COMMAND show-Befehl beendet, sondern nutzen trap-Befehl show running.
InformationsquelleAutor der Antwort netawater