PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bash - ausgabe auf tty1 - Formatierungsproblem



cgogolin
18-06-2007, 19:12
Ich möchte mit einem bash script auf tty1 ausgeben und habe ein Problem mit dem Zeilenlängen und -umbrüchen.

Folgende Situation:

Ich leite die Ausgabe des sripts mittels

exec &> /dev/tty1
auf die erste Konsole um.

Gebe ich nun per 'echo' text aus erscheint dieser auch brav auf der Konsole, aber wenn kein Benutzer an der Konsole angemeldet ist dann ist Formatierung völlig kaputt.

Solange man nur Text mit 'echo' ausgeben möchte kann man die Formatierung retten indem man 'echo' wie folgt verwendet.

echo -ne "TEXT\r\f"

Aber wenn man aus dem script heraus andere Programme aufruft (in meinem Fall rsync) dann geht das natürlich nicht.

Woran liegt es überhaupt, dass die Formatierung kaputt geht?

Gibt es noch einen anderen Weg vernünftig formatierte Ausgabe auf einem Terminal ohne angemeldeten Benutzer zu erzeugen?

jan61
18-06-2007, 22:07
...
Ich leite die Ausgabe des sripts mittels

exec &> /dev/tty1auf die erste Konsole um.
...
Woran liegt es überhaupt, dass die Formatierung kaputt geht?
...

Ich bin nicht sicher, vermute aber, dass die Terminalsettings erst mit dem Login gesetzt werden. Du könntest mal versuchen, mit folgendem Konstrukt zu spielen:

( exec ... | xargs echo -ne ) &>/dev/ttyIst aber ohne Gewähr, ich habe mich damit noch nie befasst (komisch, ich wollte sowas noch nie ;-)

Außerdem könntest Du Dir mal tput zu Gemüte führen (ich kam drauf, weil es gerade in einem anderen Thread hier auftauchte).

Jan

cgogolin
19-06-2007, 19:14
Es war ein Kampf aber es geht!

sudo bash -c "( exec ls -la ~/ | awk '{print \$0 \" \\\\\\\r\\\\\\\f \" }' | xargs echo -ne ) > /dev/tty2"

Besonders lustig ist die escape sequence Orgie \\\\\\\\\\\\\\\\\\\\\\\ ;-)

In einem script (das mit root rechten ausgeführt werden muss) sieht das dann so aus:

ls -la / | awk '{print $0 " \\\\r\\\\f " }' | xargs echo -ne

Es wäre jetzt noch praktisch wenn man das "global setzen" könne, dass alle im script erzeugten Ausgaben durch diesen Befehl gepiped werden.
Also so was in der Art von:

exec &> awk '{print $0 " \\\\r\\\\f " }' | xargs echo -ne > /dev/tty2
Doch das funktioniert leider nicht.

Wie könnte man das machen?

Danke für den Tipp mit xargs!