grandfather: Linux formatierte Ausgabe

Hallo,

jeder kennt das (jeder Linuxbenutzer) z. B. beim booten oder wenn man service xyz start eintippt.

Links kommt normaler Text rechts [ OK ] oder [ FEHLGESCHLAGEN ] und rechts ist alles schön untereinander (meistens zumindest). Wie kann ich das auch schaffen?

Geht das mit C/C++ bzw. PHP? Wenn ja, was ich stark vermute, Wie?

grandfather dankt euch für eure Hilfe

  1. Hallo grandfather.

    jeder kennt das (jeder Linuxbenutzer) z. B. beim booten oder wenn man service xyz start eintippt.

    Nein, nur der, dessen System auf initng setzt.

    Links kommt normaler Text rechts [ OK ] oder [ FEHLGESCHLAGEN ] und rechts ist alles schön untereinander (meistens zumindest).

    In SysVInit gibt es dieserlei Formatierungen nicht.

    Wie kann ich das auch schaffen?

    Geht das mit C/C++ bzw. PHP? Wenn ja, was ich stark vermute, Wie?

    Meines Wissens musst du dich nur mit Shellscripting befassen. Details zu Farbangaben bei der Ausgabe findest du hier.

    Einen schönen Freitag noch.

    Gruß, Mathias

    --
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
    debian/rules
    1. Meines Wissens musst du dich nur mit Shellscripting befassen. Details zu Farbangaben bei der Ausgabe findest du hier.

      Ich möchte nicht unbedingt die Farbe eigentlich nur die Ausrichtung.

      So nach diesem Muster:

      text               [ OK ]
      langer langer text [ OK ]
      test text          [ FEHLGESCHLAGEN ]

      1. Hallo grandfather.

        Meines Wissens musst du dich nur mit Shellscripting befassen. Details zu Farbangaben bei der Ausgabe findest du hier.

        Ich möchte nicht unbedingt die Farbe eigentlich nur die Ausrichtung.

        So nach diesem Muster:

        text               [ OK ]
        langer langer text [ OK ]
        test text          [ FEHLGESCHLAGEN ]

        Du könntest den Text unter Zuhilfename der vordefinierten Variable $COLUMNS mit Leerzeichen auffüllen:

        $ printf "%${COLUMNS}s\n", "[ OK ]"

        Kleine Erklärung:

        „%s“ ist der Format-Platzhalter für einen String, eine dem „s“ vorangestellte Nummer gibt die Auffüllbreite an, das Standard-Auffüllzeichen ist das Leerzeichen.

        Unter Zuhilfename des Wertes von $COLUMNS, welcher – wie der Name impliziert – die Anzahl der horizontal maximal darstellbaren Zeichen angibt, kannst du hier nun also den Text „rechtsbündig“ ausgeben. (Die geschweiften Klammern sind hier zur eindeutigen Abgrenzung der Variable $COLUMNS erforderlich.)

        Wenn dieser nicht direkt am Rand kleben soll, ist auch diese Anpassung problemfrei möglich:

        $ printf "%$[$COLUMNS - 2]s\n", "[ OK ]"

        Hier würde der Text eben zwei Zeichen vor dem rechten Rand enden. (Hier ist die Maskierung von $COLUMS nicht erforderlich, da der arithmetische Ausdruck innerhalb von $[] zuerst ausgewertet wird und damit der numerische Wert schon bereit steht.)

        Einen schönen Freitag noch.

        Gruß, Mathias

        --
        ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
        debian/rules
        1. $ printf "%$[$COLUMNS - 2]s\n", "[ OK ]"

          Das funktioniert einwandfrei, vielen Dank dafür.

          Aber wiso funktioniert das in PHP nicht?
          Wie ich herausgefunden habe ist $COLUMNS nicht gesetzt, kann das sein?
          Wenn ja wiso?

            
          echo shell_exec('printf "%$[$COLUMNS - 2]s\n", "[ OK ]"');  
          // folgendes ergibt überhaupt keine Ausgabe  
          echo shell_exec('printf "${COLUMNS}"');  
          
          

          Kann man dieses Problem auch lösen?

          1. Hallo grandfather.

            $ printf "%$[$COLUMNS - 2]s\n", "[ OK ]"

            Das funktioniert einwandfrei, vielen Dank dafür.

            Aber wiso funktioniert das in PHP nicht?

            Weil PHP üblicherweise nicht in einem Terminal agiert, die entsprechenden Funktionen wohl also eher mangelhaft umgesetzt wurden.

            Wie ich herausgefunden habe ist $COLUMNS nicht gesetzt, kann das sein?
            Wenn ja wiso?

            Weil diese erst manuell exportiert werden muss, wie unter anderem hier beschrieben.

            echo shell_exec('printf "%$[$COLUMNS - 2]s\n", "[ OK ]"');
            // folgendes ergibt überhaupt keine Ausgabe
            echo shell_exec('printf "${COLUMNS}"');

            
            >   
            > Kann man dieses Problem auch lösen?  
              
            PHP hat übrigens sein eigenes [printf](http://de.php.net/manual/de/function.printf.php):  
              
            `$ COLUMNS=$COLUMNS php -r 'printf("%" . getenv("COLUMNS") . "s\n", "[ OK ]");'`{:.language-sh}  
              
            (Hierbei wird $COLUMNS nur für dieses eine Kommando temporär exportiert.)  
              
              
            Einen schönen Samstag noch.  
              
            Gruß, Mathias  
            
            -- 
            ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)  
              
            debian/rules
            
  2. Hallo,

    Geht das mit C/C++ bzw. PHP? Wenn ja, was ich stark vermute, Wie?

    Ja. Das Stichwort heißt ncurses.

    Gruß

    Stareagle