Wie kann ich in der oberen Leiste meines Terminals angeben, welcher Befehl ausgeführt wird?

13

Ich führe häufig Befehle parallel aus, deren Ausführung viel Zeit in Anspruch nimmt, und manchmal verliere ich den Überblick darüber, was wo ausgeführt wird, da sie im Grunde die gleichen Informationen auf dem Bildschirm ausgeben.

Wissen Sie, wie Sie herausfinden können, welcher Befehl in welchem ​​Terminal ausgeführt wird?

Luca Minciullo
quelle
1
Ich bin mir nicht sicher, ob das noch funktioniert, aber das könnte neben der hervorragenden Antwort von @dessert auch helfen. → askubuntu.com/questions/774532/…
Videonauth

Antworten:

12

Entnommen aus Bash - Aktualisierung des Terminaltitels durch Ausführen eines zweiten Befehls · U & L und geringfügig geändert:

trap 'echo -ne "\033]2;$(history 1 | sed "s/^[0-9 ]* \+//")\007"' DEBUG

Dieser (ab) verwendet das DEBUGSignal als Auslöser, um den Titel mit dem letzten Eintrag aus Ihrem Verlauf, dh dem zuletzt ausgeführten Befehl, über eine XTerm-Steuersequenz zu aktualisieren . Fügen Sie die Zeile zu Ihrer hinzu ~/.bashrc, damit die Funktion in jedem neuen Terminalfenster aktiviert wird.

Um eine andere Befehlsausgabe neben dem Titel auszudrucken, sagen Sie das aktuelle Verzeichnis mit pwdgefolgt von ":" und dem aktuell ausgeführten Befehl. Ich empfehle printfFolgendes:

trap 'echo -ne "\033]2;$(printf "%s: %s" "$(pwd)" "$(history 1 | sed "s/^[0-9 ]* \+//")")\007"' DEBUG

Bei einigen Terminalemulatoren können Sie einen dynamischen Titel angeben und sogar den Befehlsnamen als Option angeben, damit Sie nicht einmal herumfummeln müssen - ich habe ihn in yakuakeden Profileinstellungen gesucht und gefunden .

Dessert
quelle
2

Der Titel des Terminalfensters kann durch Ändern des Werts der Variablen $PS1- der primären Eingabeaufforderungszeichenfolge - geändert werden . [1] [2] . Wir könnten diese Lösung mit der Idee kombinieren, den Befehl aus der Antwort des Desserts zu verwenden . history


Ansatz 1: Aktualisieren Sie den Wert von $PS1automatisch. (Aktualisieren)

Fügen Sie die folgenden Zeilen am Ende der Datei hinzu ~/.bashrc:

# Change the terminal window title, based on the last executed command
rtitle() {
        # If the variable $PS1_bak is unset,
        # then store the original value of $PS1 in $PS1_bak and chang $PS1
        # else restore the value of $PS1 and unset @PS1_bak
        if [ -z "${PS1_bak}" ]; then
                PS1_bak=$PS1
                PS1+='\e]2;$(history 1 | sed "s/^[0-9 ]* \+//")\a'
        else
                PS1=$PS1_bak
                unset PS1_bak
        fi
};
export -f rtitle        # Export the function to be accessible in sub shells
#rtitle                 # Uncomment this line to change the default behaviour

Dann source ~/.bashrcoder einfach ein neues Terminal öffnen und die Funktion folgendermaßen nutzen:

  • Ausführen rtitle, um den Titel des Terminalfensters basierend auf dem zuletzt ausgeführten Befehl automatisch zu ändern.
  • Führen Sie rtitleerneut aus, um zum Standardverhalten zurückzukehren.

Ansatz 2: Aktualisieren Sie den Wert von $PS1manuell. (Erstantwort)

Fügen Sie die folgenden Zeilen am Ende der Datei hinzu ~/.bashrc:

set-title() {                                                                                 # Set a title of the current terminal window
        [[ -z ${@} ]] && TITLE="$(history 2 | head -1 | sed "s/^[0-9 ]* \+//")" || TITLE="$@" # If the title is not provided use the previous command
        [[ -z ${PS_ORIGINAL} ]] && PS_ORIGINAL="${PS1}" || PS_ORIGINAL="${PS_ORIGINAL}"       # Use the original value of PS1 for each future change
        PS1="${PS_ORIGINAL}"'\e]2;'"$TITLE"'\a'                                               # Change the prompt (the value of PS1)
}; export -f set-title

Dann source ~/.bashrcoder einfach ein neues Terminal öffnen und die Funktion folgendermaßen nutzen:

  • set-title <something>ändert den Titel des Terminalfensters in <something>.
  • set-title Ohne Argument wird der Titel des Terminalfensters auf den vorherigen Befehl geändert.

Referenzen und Beispiele:

pa4080
quelle