Ausgabe in einem Shell Skript

Hinweis: In dem Thema Ausgabe in einem Shell Skript gibt es 13 Antworten auf 2 Seiten. Der letzte Beitrag () befindet sich auf der letzten Seite.
  • Nein, du kommst weder mit printf, noch mit den Forenregeln zurecht.
    Es ist printf völlig egal, was es zu drucken hat.
    Das tut es korrekt, solange du nicht an den LANG Einstellungen rumgefummelt hast.

    Du sollst ALLES, das heißt DEINEN Code UND die Ausgabe posten.
    Denk mal drüber nach, warum.

    Irgendwann kommst du vielleicht auf den glorreichen Gedanken, dass wir damit den Fehler einfach sehen würden.
    Und dann könnte man mal eben schnell sinnvoll antworten.

    Aber sinnlos hin- und herschreiben, ein wenig mutmaßen, ob nicht der eine Befehl ein wenig erkältet, der andere vielleicht doch schon zu gebrechlich ist, macht doch viel mehr Spaß, wenn auch keinerlei Sinn.
    Sokrates sagte, dass er nichts wisse.
    Ich bin viel, viel klüger als Sokrates.
    Ich weiß ganz genau, dass ich gar nichts weiß.

    Für den Inhalt des Beitrages 119812 haftet ausdrücklich der jeweilige Autor: Berichtigung

  • Danke für deine Hilfe

    Shell-Script

    1. #!/bin/bash
    2. clear
    3. var1="****************************"
    4. var2="*************************"
    5. var3="************************ß"
    6. printf ' | %35s | \n' "$var1"
    7. printf ' | %35s | \n' "$var2"
    8. printf ' | %35s | \n' "$var3"
    9. ********************************************
    10. Ergebnis
    11. ********************************************
    12. | **************************** |
    13. | ************************* |
    14. | ************************ß | <- Hier eingerückt oder nicht?
    Alles anzeigen



    Idefix

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Linux-Idefix ()

    Für den Inhalt des Beitrages 119820 haftet ausdrücklich der jeweilige Autor: Linux-Idefix

  • Du hast recht.

    (Ich hätte wohl besser gelesen, statt zu maulen)

    printf (egal ob das Bash interne oder das /usr/bin/printf machen das nicht.
    Sie schlucken IMMER für JEDEN Umlaut eine Stelle.

    Das ist sogar im POSIX Standard genau so definiert.
    (völlig idiotisch, aber wohl dauerhaft. Nichts hält sich so lange, wie Dummheiten)

    Du hast mehrere Möglichkeiten das zu umgehen.
    Die zsh und fish halten sich hier nicht an die Standards und können das deshalb.
    (Was aber auch keine Lösung ist)

    Es bleiben dir vernünftigerweise nur zwei Möglichkeiten (, die mir adhoc dazu einfallen):
    Du bastelst dir eine eigene printf Funktion, die dir das sauber erledigt,
    oder du nimmst awk, dort tut die printf Funktion das anständig.

    Eine mögliche Shelllösung:

    Brainfuck-Quellcode

    1. var1="****************************"
    2. var2="*************************"
    3. var3="************************ä"
    4. # Cursor-Positionen festlegen
    5. pos2=$(tput cuf 40)
    6. printf "|%s\r$pos2|\n" "$var1"
    7. printf "|%s\r$pos2|\n" "$var2"
    8. printf "|%s\r$pos2|\n" "$var3"
    Das \r im Formatstring heißt "Gehe in der jetzigen Zeile zurück auf Postition Null". Das Wagen\rücklauf im Deutsch der alten Säcke, die noch Schreibmaschine können. Und OHNE Zeilenvorschub.
    Damit positionierst du den Cursor in der aktuellen Ausgabezeile wieder am Anfang und springst dannach auf Position 40 der Zeile.

    Beachte, dass der Formatstring jetzt in doppelten Hochkommata steht.
    Die Bash expandiert innerhalb einfacher Hochkommata absolut gar nichts. Also würde mit einfachen Hochkommatas auch die Variable pos2 wortwörtlich als $pos2 erscheinen.

    Ich denke, awk ist einfacher, und in jedem Fall lernenswert.

    Hatte ich schon mal erwähnt, dass die Code-Tags seit Wochen keine Kommentare anzeigen, wenn man nicht Brainfuck als Sprache auswählt?
    Ich schreibe keinen Brainfuck, sondern Shell.
    Sokrates sagte, dass er nichts wisse.
    Ich bin viel, viel klüger als Sokrates.
    Ich weiß ganz genau, dass ich gar nichts weiß.

    Für den Inhalt des Beitrages 119838 haftet ausdrücklich der jeweilige Autor: Berichtigung