logo

Suletuxe.de
Linux - Nutzer
helfen
Linux - Nutzern

Willkommen, Gast. Bitte Login oder Registrieren.
24. November 2024, 11:58:32
Übersicht Hilfe Suche Login Registrieren

Amateurfunk Sulingen
Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe  |  allgemeine Kategorie  |  Allgemeine Diskussionen  |  Thema: BASH PROMT_COMMAND « zurück vorwärts »
Seiten: [1] nach unten Drucken
   Autor  Thema: BASH PROMT_COMMAND  (Gelesen 761 mal)
Sebastian
Sr. Member
****

Online

Einträge: 487





Profil anzeigen
BASH PROMT_COMMAND
« am: 07. Oktober 2023, 11:29:45 »

Hallo Suletuxe,

Ich wollte mit asciinema ein paar Tutorials aufnehmen. Bei viel mir auf nachdem ich die Aufnahmedatei kontrolliert habe, (Dies ist eine einfache JSON formatierte Datei) das vor meinen Promt immer ein anderer String zu sehen war, den ich bei mir im Terminal aber überhaupt nicht sehe.

Code:

[0.046629, "o", "\u001b]0;sebastian@NB-FUJITSU:~\u0007\u001b[?2004h[REC E0 ~]$ "]


Dabei sollte sich der Promt wie bei der Aufnahme auch zu sehen nur auf

Code:

[REC E0 ~]$

Beschränken. Also habe ich ein wenig nachgeforscht woran das liegen könnte:

Zuerst habe ich natürlich die üblichen verdächtigen Kontrolliert, ob sich da Code befindet der meinen Promt beeinflusst (~/.bashrc, ~/.bash_profile ~./profile).

Nichts gefunden, nur meinen Code der von der ~/.bash_profile die ~/.bashrc lädt die wiederum meine Konfiguartionsdatei lädt mit meinen Anspassungen ~/.bash_myconfig die meine PS1 Variable (Prompt) anpasst.

Gut dachte ich mir, dann schaue ich mir mal die Systemkonfigurationsdateien zur Bash an, die vor meiner Konfigurationen im Heimatverzeichnis geladen werden. Und ich wurde in der Datei /etc/bash.bashrc fündig:

Code:

...

PS1='[\u@\h \W]\$ '

case ${TERM} in
  Eterm*|alacritty*|aterm*|foot*|gnome*|konsole*|kterm*|putty*|rxvt*|tmux*|xterm*)
    PROMPT_COMMAND+=('printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"')

    ;;
  screen*)
    PROMPT_COMMAND+=('printf "\033_%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"')
    ;;
esac

...

Hier wird die PS1 Variable auch gesetzt die von meiner Konfiguration aus dem Homeverzeichnis gleich wieder überschrieben wird. Aber im case Statment entdeckte ich für mich noch eine Unbekanntes Array das mir sehr verdächtig aussah PROMPT_COMMAND und der printf Befehl sieht mir genau danach aus was in der Aufnahmedatei vor meinen eigentlichen Promt steht.

Also habe ich die Umgebungsvariable $TERM einmal geprüft ob das case Statement auch bei meinem Terminal greifen würde:

Code:

echo $TERM
xterm-kitty

ja würde es. Den Übeltäter habe ich also schon mal gefunden. Jetzt intressiert mich natürlich wofür dieses PROMT_COMMAND array überhaupt da ist. Also das Handbuch von Bash aufgeschlagen und nach PROMT_COMMAND gesucht:

Zitat:
PROMPT_COMMAND
              If  this  variable  is  set,  and  is  an array, the value of each set element is executed as a command prior to issuing each primary
              prompt.  If this is set but not an array variable, its value is used as a command to execute instead.

      PROMPT_DIRTRIM
              If set to a number greater than zero, the value is used as the number of trailing directory components to retain when  expanding  the
              \w and \W prompt string escapes (see PROMPTING below).  Characters removed are replaced with an ellipsis.

Ahh man kann damit also jedes Mal bevor der Promt von der Bash erzeugt wird, einen Befehl ausführen lassen. Das ist doch schon mal gut zu wissen, damit kann man bestimmt später noch was anfangen. Zudem stand genau dadurunter noch etwas nützliches das man mit der PROMPT_DIRTRIM Variable die Pfad länge im Prompt verkürzen kann. Falls man nicht immer den kompletten Pfad dort drine sehen möchte. Auch sehr nützlich zu wissen wie ich finde.

Da ich den Promt aber nur meinen Benutzer und auch nur dann geändert haben möchte, wenn ich asciinema starte, habe ich in meiner ~.bash_myconfig Datei nun folgendem Einzeiler hinzugefügt, der die Konfiguration aus der /etc/bash.bashrc überschreibt:

Code:

(( ${ASCIINEMA_REC} )) && unset PROMPT_COMMAND; PS1='[REC E$? \W]\$ '

Dazu muss man wissen das beim starten von asciinema die Umgebunsvariable ASCIINEMA_REC=1 gesetzt wird, und damit mein Code funktioniert. Somit greift die Anpassung, nur wenn ich asciinema starte.

Daran konnte ich wieder sehen wie wahnsinnig komplex ein Betriebssystem ist, und man unmöglich alles wissen kann, aber Linux mit seiner Offenheit dazu einlädt dies zu erkunden, wenn man möchte.

LG
Sebastian
« Letzte Änderung: 07. Oktober 2023, 11:35:49 von Sebastian » Gespeichert

Richtig um Hilfe bitten
Seiten: [1] nach oben Drucken 
Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe  |  allgemeine Kategorie  |  Allgemeine Diskussionen  |  Thema: BASH PROMT_COMMAND « zurück vorwärts »
Gehe zu: 


Login mit Username, Passwort und Session Länge

 Es wird die Verwendung "Blink"-basierter Browser und mindestens 1024x768 Pixel Bildschirmauflösung
für die beste Darstellung empfohlen
 
freie Software für freie Menschen!
Powered by MySQL Powered by PHP Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe | Powered by YaBB SE
© 2001-2004, YaBB SE Dev Team. All Rights Reserved.
- modified by Andreas Richter (DF8OE)
Valid XHTML 1.0! Valid CSS!