Ausgabe von echo nur einzeilig, je nach Breite des Terminalfensters

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Ausgabe von echo nur einzeilig, je nach Breite des Terminalfensters

Beitrag von Richard » 29.10.2021 23:35:23

Hallo,

ich habe ein Script mit teilweise recht langen Ausgaben von "echo" und hab die bisher mit

Code: Alles auswählen

echo "$bla" | cut -c -100
auf 100 Zeichen begrenzt um zweizeilige Ausgaben zu vermeiden. Geht das auch eleganter, indem man echo zu einzeiligen Ausgaben zwingt, aber abhängig von der Breite des Terminalfensters oder müsste das im Terminal selbst eingestellt werden?

Benutzeravatar
Meillo
Moderator
Beiträge: 8781
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Ausgabe von echo nur einzeilig, je nach Breite des Terminalfensters

Beitrag von Meillo » 29.10.2021 23:37:41

So vielleicht:

Code: Alles auswählen

echo "$bla" | cut -c -"$COLUMNS"
Use ed once in a while!

rodney
Beiträge: 332
Registriert: 09.12.2016 04:15:59

Re: Ausgabe von echo nur einzeilig, je nach Breite des Terminalfensters

Beitrag von rodney » 29.10.2021 23:47:40

Alternativ:

Code: Alles auswählen

echo "${bla:0:$(tput cols)}"

Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Re: Ausgabe von echo nur einzeilig, je nach Breite des Terminalfensters

Beitrag von Richard » 02.11.2021 12:08:58

Das geht grds., aber da wird deutlich zu früh geschnitten. Da wird schätzungsweise 80% des Platzes genutzt. Woher bezieht tput denn die Info über die "cols"? Das Ziel war den Platz des Terminalfensters voll auszunutzen, abhängig von der Fensterbreite. Das heißt: Fenster über die ganze Breite heißt mehr wird angezeigt als bei Fenster über 50% der Breite.

Auch werden nicht alle Zeilen an der gleichen Stelle geschnitten. Manchmal sind es 3-5 Stellen mehr oder weniger.

Benutzeravatar
Meillo
Moderator
Beiträge: 8781
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Ausgabe von echo nur einzeilig, je nach Breite des Terminalfensters

Beitrag von Meillo » 02.11.2021 12:44:43

Vermutlich liegt das daran, dass mit Bytes und nicht mit Zeichen gerechnet wird. Wenn also mehr Umlaute und so enthalten sind, wird die Zeile kuerzer sein.

Pipe mal statt durch cut durch awk, vielleicht unterstuetzt das UTF-8:

Code: Alles auswählen

echo "$bla" | awk '{print substr($0,1,'"$COLUMNS"')}'
Use ed once in a while!

Benutzeravatar
Phineas
Beiträge: 348
Registriert: 20.06.2012 20:26:19

Re: Ausgabe von echo nur einzeilig, je nach Breite des Terminalfensters

Beitrag von Phineas » 02.11.2021 14:38:23

Eine nichtproportionale Schriftart ist eingestellt?

Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Re: Ausgabe von echo nur einzeilig, je nach Breite des Terminalfensters

Beitrag von Richard » 02.11.2021 16:01:46

Ich verwende DejaVu Sans Mono Book. Da werden zumindest alle Zeilen genau untereinander dargestellt. Das heißt der 4. Buchstabe eines Wortes steht immer genau unter dem 4. BS der Zeile darüber und darunter.

Auch mit awk klappt das nicht. Auch hier passieren komische Sachen, dass manche Ausgaben länger sind als andere, auch wenn keine Umlaute enthalten sind. Auch Ausgaben mit je einem Umlaut sind teilweise unterschiedlich lang. Ich lass das jetzt bei 'cut' und fertig.

Benutzeravatar
Meillo
Moderator
Beiträge: 8781
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Ausgabe von echo nur einzeilig, je nach Breite des Terminalfensters

Beitrag von Meillo » 02.11.2021 16:15:11

Poste doch mal konkrete Ausgaben (ggf. pseudonymisiert), dann koennen wir dir dieses Problem auch noch loesen. Ohne konkrete Ausgaben ist es halt nur Raterei von unserer Seite.
Use ed once in a while!

Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Re: Ausgabe von echo nur einzeilig, je nach Breite des Terminalfensters

Beitrag von Richard » 04.11.2021 12:13:08

Das Script prüft Dateien in bestimmten Ordner. Hab ich mir mal erstellt, da ich nach einem Backup-Restore feststellen musste, dass einige Hörbuchdateien und eBooks beschädigt waren.

Es wird im Terminal lediglich ausgegeben, dass Datei Nummer X von insgesamt Y, dann der Dateiname und der Ordner in dem sie steckt.

Code: Alles auswählen

echo -e "$count" von "$count_total" gelesen - $(echo "$filename" in "$dirname" | cut -c -130)

Antworten