[BASH] Zeilenumbruch verhindern?

brenner

Commander
Registriert
Apr. 2002
Beiträge
3.037
Hallo,

Ich möchte gerne die Ausgabe zweier Kommandos in eine Zeile, ohne Umbruch packen, da sonst das nächste Programm, welches das Kommando benutzt, nur die erste Zeile sieht und verarbeitet.


Ausgabe wenn die beiden Befehle seperat aufgerufen werden:
Code:
root@cacti04:~# echo CGET IEQ0516144:1 | nc localhost 6770 -q 1
HUMIDITY:59 TEMPERATURE:19.50
root@cacti04:~# echo CGET IEQ0516144:2 | nc localhost 6770 -q 1
ADJUSTING_DATA:0 ADJUSTING_COMMAND:0 SETPOINT:6.00
root@cacti04:~#


Ausgabe wenn Befehle per && hintereinander aufgerufen werden:
Code:
root@cacti04:~# echo CGET FEQ0065666:1 | nc localhost 6770 -q 1 && echo CGET FEQ0065666:2 | nc localhost 6770 -q 1
HUMIDITY:64 TEMPERATURE:20.70
ADJUSTING_DATA:204 ADJUSTING_COMMAND:0 SETPOINT:21.00
root@cacti04:~#


Wunschausgabe:
Code:
root@cacti04:~# <Befehl>
HUMIDITY:64 TEMPERATURE:20.70 ADJUSTING_DATA:204 ADJUSTING_COMMAND:0 SETPOINT:21.00

Geht das mit einem Einzellerkommando ohne ein extra Script dafür zu schreiben?
 
mit printf müsstest du weiter kommen, ich glaube das ist dem printf aus C ziemlich ähnlich. Zeilenumbrüche muss man jedenfalls mit \n einfügen.
 
Mir fällt spontan nichts besseres ein, als die Ausgaben in Variablen zu speichern und diese anschließend auszugeben

Code:
a=`echo HUMIDITY:64 TEMPERATURE:20.70` && b=`echo ADJUSTING_DATA:204 ADJUSTING_COMMAND:0 SETPOINT:21.00`; echo $a $b

Sollte auch mit netcat funktionieren, aber das war mir jetzt erstmal zu unbequem

brenner schrieb:
Geht das mit einem Einzellerkommando ohne ein extra Script dafür zu schreiben?

Wenn dir die Länge egal ist, kannst du jedes Script auch als Einzeiler in die Konsole hacken ;)


Edit: Achja, der Spieltrieb...
Habs nochmal mit nc getestet und es geht wie erwartet
Code:
a=`echo CGET FEQ0065666:1 | nc localhost 6770 -q 1`; b=`echo CGET FEQ0065666:2 | nc localhost 6770 -q 1`; echo $a $b; unset a; unset b

Das Löschen der Variablen ist optional.
 
Zuletzt bearbeitet: (unset a und b)
Ich habe deine Befehlszeile mal ausprobiert, sieht in der Konsole sehr gut aus, mal sehen ob das Programm sie auch schluckt :-)
 
Ich hab auch noch ne Variante ohne Variablen gefunden

Code:
(echo CGET FEQ0065666:1 | nc localhost 6770 -q 1 && echo CGET FEQ0065666:2 | nc localhost 6770 -q 1) | tr -d "\n"; echo

Das frist aber auch das letzte \n weg, weshalb ich noch ein echo drangeklebt hab. Falls du das nicht brauchst kannst du es auch weglassen.
 
Die erste Variante ist besser sonst hab ich ein Leerzeichen zu wenig in der Ausgabe ;-)

HUMIDITY:63 TEMPERATURE:20.40ADJUSTING_DATA:248 ADJUSTING_COMMAND:0 SETPOINT:22.00


Übrigens, es funktioniert einwandfrei, VIELEN DANK!!!
 
echo -n lässt das automatisch gesetzt newline aus.
Code:
$ echo -n "hi"; echo "ho"
hiho
 
Zurück
Oben