Bash-Ausgabeaufforderung

0

Ich passe also gerade mein PS1-Bash-Prompt an und fand die iPython-Art der Anzeige und Ausgabe ziemlich ordentlich.

Terminal Screenshot of Prompt and iPython

Wie Sie sehen, habe ich mein PS1-Prompt so konfiguriert, dass es (fast) wie das iPython-Input Prompt aussieht.

PS1="\n[\t] \e[1m\e[38;5;196m\u@\H\e[0m in \e[1m\e[38;5;196m\w\e[0m\n\e[92mIn [\e[1m\#\e[0m] \$ "

Ich kann jedoch nicht herausfinden, wie eine Ausgabe-Eingabeaufforderung in Bash angezeigt wird!

Was ich eigentlich suche, ist eine Möglichkeit, eine Nachricht anzuzeigen und einen Zähler zu erhöhen, wann immer ein Befehl eine Ausgabe an stdout zurückgibt (die Möglichkeit, die stderr-Ausgabe anzupassen) wäre auch nett.

Kann mir jemand sagen, ob und wie dies erreicht werden kann? Gibt es ein gutes Argument gegen meine Idee?

Tim Hilt
quelle
Vergiss es. Der Hauptunterschied ist: Wenn Python etwas druckt, weiß Python, was gedruckt wird. Wenn Sie einen Befehl von bash aus ausführen, erzeugt er nicht die Ausgabe von bash, sondern der externe Befehl, der ihn erzeugt, und bash hat keine Ahnung, was dieser Befehl druckt. Damit dies funktioniert, müssen Sie die Ausgabe durch einen Filter senden. Dies gilt jedoch nur für Apps, die lediglich eine Ausgabe erzeugen, nicht für Texteditoren und dergleichen.
egmont
In einem anderen Zusammenhang: Sie müssen die Escape-Sequenzen der PS1 in einschließen \[ \] Paare, sonst fällt die Zeilenbearbeitung stark auseinander.
egmont
OK danke! Das ist sehr hilfreich. Werden die Benutzer- / Host- / Zeitangaben auch als Escape-Sequenzen betrachtet? Ich muss gestehen, dass ich einige Zeilenprobleme hatte, seit ich die Eingabeaufforderung geändert habe.
Tim Hilt
Nein, was Sie zwischen diesen Zeichen einschließen sollten, ist, wenn bash der Meinung ist, dass der Cursor weiterbewegt wird. Dumme Schlampe erkennt es nicht \e[...m als Sequenz, die den Cursor nicht bewegt. \u und Freunde haben nichts damit zu tun und sollten nicht eingeschlossen werden.
egmont
Sie könnten den Rückkehrcode des letzten Prozesses in $ PS1 haben ...
Xen2050