bash text ausgabe in gleicher zeile ?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
ren22

bash text ausgabe in gleicher zeile ?

Beitrag von ren22 » 04.10.2014 19:17:26

Hallo,

ich wollte mal fragen wie das funktioniert bei manchen scripten wenn sie starten sieht man als Beispiel:
starting services foobar .... und dann nach einer Weile wenn der Service gestartet wurde erscheint auf der gleichen Zeile "OK" dahinter, oder rechts am Bildschirm.
Wie schreibt man so etwas, also wie müsste der code aussehen unter bash in einem script ?

Also der Ablauf ist denke ich klar 1) Meldung 2) programm starten 3) in der gleichen Zeile dann "OK" oder "Failed" ausgeben.
Bloss weiss ich noch nicht wie man so etwas schreibt :) vielleicht ist ja einer so nett von euch und kann mir mal ein kleines beipiel coden ;)

Danke
ren22

ren22

Re: bash text ausgabe in gleicher zeile ?

Beitrag von ren22 » 04.10.2014 19:22:17

ok denke habe eine Lösung gefunden:

Code: Alles auswählen

#!/bin/sh
echo 'Eine Zeile mit Umbruch';
echo 'Eine Zeile ohne Umbruch, \c';
echo 'direkt gefolgt von einer weiteren Zeile.';
oder wenn das nicht funktioniert

Code: Alles auswählen

#!/bin/bash
echo 'Eine Zeile mit Umbruch';
echo -n 'Eine Zeile ohne Umbruch, ';
echo 'direkt gefolgt von einer weiteren Zeile.';
quelle:http://www.tippscout.de/bash-echo-zeile ... _5937.html

Danke

HumiNi
Beiträge: 325
Registriert: 02.10.2014 21:46:18

Re: bash text ausgabe in gleicher zeile ?

Beitrag von HumiNi » 04.10.2014 19:23:16

Code: Alles auswählen

echo bla ; echo blubb
echo -n bla ; echo blubb
Gedächtnis wie ein Rechen: Nur Mist bleibt hängen.

ren22

Re: bash text ausgabe in gleicher zeile ?

Beitrag von ren22 » 04.10.2014 20:18:12

hallo gibt es auch die Möglichkeit das, als Beispiel "OK" immer untereinander auszugeben? So sieht bei mir die Ausgabe aus... sieht nicht toll aus
startete dienst: foobar1 ... OK
startete dienst: foobarof1 ... OK
startete dienst: foobarofbar1 ... OK
startete dienst: foobarofbarfoo1 ... OK
ich hätte gerne das, dass "OK" immer untereinander bei der Ausgabe erscheint.. wie funktioniert das ?

Code: Alles auswählen

startete dienst: foobar1 ...              OK
startete dienst: foobarof1 ...            OK
startete dienst: foobarofbar1 ...         OK
startete dienst: foobarofbarfoo1 ...      OK


Danke
ren22

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: bash text ausgabe in gleicher zeile ?

Beitrag von smutbert » 04.10.2014 20:56:27

Code: Alles auswählen

echo -ne "Nummerino 1: \t " ; echo  "Ok."
echo -e "Nummer 2: \t Ok."
echo -n "Nummer Drei:" ; echo -e "\t Ok."

ren22

Re: bash text ausgabe in gleicher zeile ?

Beitrag von ren22 » 04.10.2014 23:46:54

Danke für die Antwort, also "\t" soll wohl ein Tabulator darstellen wie ich das verstehe, soweit so gut, gibt es noch ein Möglich zusagen, wie als Bsp. (HTML, margin="right") das "OK" vom rechten Rand aus zu zentrieren dann könnte man das "OK" in eine Funktion packen welchen das "OK" immer an der selben stelle ausgibt vom rechten rand aus.

Die Lösung finde ich nicht so toll hier :
hallo \t\t\tOK
hallowelten \t\tOK
ichfahreganzlangsam \tOK

Danke

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: bash text ausgabe in gleicher zeile ?

Beitrag von Cae » 05.10.2014 02:03:13

Code: Alles auswählen

#!/bin/bash

print_fmt_status() {
	text="${1:-text}"
	status="${2:-status}"
	cols="$(tput cols)"
	
	pad="$((cols - 1 - ${#text} - 1 - ${#status} - 1))"
	padding=" "

	for (( ; pad-- > 0; )); do
		padding="$padding "
	done

	echo " $text$padding$status "
}

print_fmt_status
print_fmt_status 'foo bar' 'ok'
print_fmt_status 'foo bar' 'broken'
print_fmt_status 'lorem ipsum dolor sit amet' 'ok'
print_fmt_status 'lorem ipsum dolor sit amet' 'broken'
Die /bin/sh-Variante hat einen fork() mehr drin wegen dem seq(1). Interessanterweise kann die dash(1) mittels ${#string} die Zeichen zaehlen, ich bin mir aber nicht sicher, ob man sich drauf verlassen sollte.

Code: Alles auswählen

#!/bin/sh

print_fmt_status() {
	text="${1:-text}"
	status="${2:-status}"
	cols="$(tput cols)"
	
	pad="$((cols - 1 - ${#text} - 1 - ${#status} - 1))"
	padding=" "

	for fnord in $(seq "$pad"); do
		padding="$padding "
	done

	echo " $text$padding$status "
}

print_fmt_status
print_fmt_status 'foo bar' 'ok'
print_fmt_status 'foo bar' 'broken'
print_fmt_status 'lorem ipsum dolor sit amet' 'ok'
print_fmt_status 'lorem ipsum dolor sit amet' 'broken'
In beiden Faellen hole ich mir mit tput cols die Anzahl der Spalten, ziehe von links nach rechts
  • ein Leerzeichen
  • die Textlaenge
  • ein Leerzeichen
  • die Statustext-Laenge
  • ein Leerzeichen
ab und fuelle die verbleibenden freien Zeichen mit Leerzeichen in der Mitte auf.

Die Ausgabe sieht in einem 80x24er Terminal so aus:

Code: Alles auswählen

 text                                                                    status 
 foo bar                                                                     ok 
 foo bar                                                                 broken 
 lorem ipsum dolor sit amet                                                  ok 
 lorem ipsum dolor sit amet                                              broken 
Bitte beachte aber, dass so eine Anzeige insbesondere bei breiten Terminals super nervig ist, weil man sehr leicht in der Zeile verrutscht, wenn da mehrere Dienste gestartet/gestoppt wurden.

Ahja, und man kann natuerlich die Helfer-Funktionen (/lib/lsb/init-functions) vom LSB-Zeugs nehmen, anstatt das nochmal selbst zu implementieren.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

DeletedUserReAsG

Re: bash text ausgabe in gleicher zeile ?

Beitrag von DeletedUserReAsG » 05.10.2014 03:15:48

Für genaues Positionieren und Manipulieren könnte man auch über die Verwendung eines Hilfsmittels, wie z.B. curses, nachdenken.

Antworten