PHP/bash: Konsolenausgabe positionieren

Kürzlich benötigte ich für eine PHP Konsolenanwendung die Ausgabe einer Statuszeile. Die ausgegebene Zeile sollte jedoch nicht (wie sonst üblich) jeweils in einer neuen Zeile landen, sondern immer in der selben Zeile – so dass man einen schnellen Überblick über den Scriptstatus bekommt. Wie auch immer – ich habe mich dann etwas durch die Terminal ANSI Escape Sequenzen gekämpft und das ganze mit meinem PHP Script kombiniert. Folgend die entsprechende Funktion für die Ausgabe:

function echoFixedLine($string) {
     echo "\033[K" . $string . "\033[" . strlen ($string) . "D";
}
 
echo "TEST:";
 
for ($i=0; $i<=100; $i++) {
    echoFixedLine("Number: " . $i);
    sleep(1);
}
 
// Ausgabe nach ca. 101 Sekunden:
TEST:
Number: 100

Die Funktion löscht immer zunächst die ganze Zeile, schreibt dann den gewünschten String und positioniert anschließend den Cursor wieder an den Anfang für die eventuelle nächste Zeile. Denkbar wären damit z.B. auch „grafische“ Fortschrittsanzeigen…

Hier ein paar weiter Informationen zu den Escape-Sequenzen – eine komplette Referenz haben ich leider noch nicht gefunden.

Eine Antwort auf „PHP/bash: Konsolenausgabe positionieren“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.