Bash-Ausgabeaufforderung

466
Tim Hilt

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?

0
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 vor 5 Jahren 0
In einem anderen Zusammenhang: Sie müssen die Escape-Sequenzen der PS1 in `\ [` `\]` -Paare einschließen, da sonst die Zeilenbearbeitung schlecht zerfällt. egmont vor 5 Jahren 0
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 vor 5 Jahren 0
Nein, was Sie zwischen diesen Zeichen einschließen sollten, ist, wenn bash der Meinung ist, dass der Cursor weiterbewegt wird, was aber tatsächlich nicht der Fall ist. Silly Bash erkennt `\ e [... m` nicht als Sequenz, die den Cursor nicht bewegt. `\ u` und Freunde haben nichts damit zu tun und sollten nicht eingeschlossen werden. egmont vor 5 Jahren 0
Vielen Dank! Das hat sehr geholfen! Tim Hilt vor 5 Jahren 0
Sie könnten den Rückkehrcode des letzten Prozesses in $ PS1 haben ... Xen2050 vor 5 Jahren 0
@TimHilt Möglicherweise ist [diese Antwort] (https://superuser.com/a/1368273/432690) hilfreich, wenn es darum geht, was in `\ [` `\]` eingeschlossen werden soll. Kamil Maciorowski vor 5 Jahren 0

0 Antworten auf die Frage