(?Vieleicht?) kleines Scriptproblem ...

Post Reply
Message
Author
eq

(?Vieleicht?) kleines Scriptproblem ...

#1 Post by eq »

Hi .. ich habe ein Problem - eigentlich recht simpel:

PARAM="`who`"
echo $PARAM

wenn ich who in der Konsole eingebe, dann kommt das sauber, aber mit diesen Befehlen bekomme ich alle Zeilen hintereinandergeschrieben ... es schaut wirr aus.

ich möchte anschließend ein
dialog --infobox $PARAM 0 0
aufrufen, aber leider schaut das nicht sehr sauber aus

danke schon mal

Andreas B.

Re: (?Vieleicht?) kleines Scriptproblem ...

#2 Post by Andreas B. »

1. die substitution ueber die singlequotes wuerde ich ueber
: PARAM=$( who ) :
erledigen das verhindert schon mal Fehlinterpretationen und macht den code wesentlich lesbarer

###############################
#!/bin/sh
PARAM=$( who )
echo $PARAM
sleep 2
dialog --infobox "$PARAM" 20 50
###############################

80*25
<- fuehre dort die dialog script am besten aus also in der textconsole nicht
in der console unter X

eq

Re: (?Vieleicht?) kleines Scriptproblem ...

#3 Post by eq »

hi..
erstmal danke ... leider ist das Problem nicht gelöst.
er schreibt nach wie vor hintereinander (läßt ein leerzeichen zwischen den wörtern frei)

Leider
andere Vorschläge ?

Danke

Jochen

Re: (?Vieleicht?) kleines Scriptproblem ...

#4 Post by Jochen »

Jau, einen habe ich noch.

Und zwar ist Dein Problem mehrteilig...

Die Shell trennt die einzelnen Wörter einer Eingabe nach den Feldtrennern auf, die in der Variablen IFS (<u>i</u>nternal <u>F</u>ield <u>S</u>eparator) aufgeführt sind. Per Default sind das Blank, Tab und Newline. Bei der Ausgabe werden die Wörter dann in Folge ausgegeben, mit dem Trennzeichen, welches an erster Stelle in IFS steht, typischerweise Blank also. Damit wird das Newline zu einem Blank, und der schöne Umbruch ist futsch. Das kannst Du aber verhindern, in dem Du um $PARAM Anführungszeichen setzt. Beispiel:

#!/bin/sh
PARAM=$( who )
echo "$PARAM"

Zweiter Teil des Problems: "dialog" unterdrückt die Newlines ebenfalls in seiner Eingabe (ist aber nicht der gleiche Mechanismus wie in der Shell)... Aber wenn man ihm ein "\<!--no-->n" statt eines echten Newlines gibt, macht er den Zeilenumbruch korrekt. Mit ein bisschen sed/tr geht dann alles gut:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#!/bin/sh

function txt2ib
{
echo "$*" | sed 's/$/\<!--no-->\<!--no-->n/' | tr -d '\<!--no-->012'
}

PARAM=$( who )
dialog --infobox "$(txt2ib "$PARAM")" 20 50
</font><hr></pre></blockquote>
Die Shell-Funktion txt2ib fügt in ihrem Argument an jedem zeileende ein "\<!--no-->n" ein und löscht danach das echte Newline-Zeichen. Und mit $() wird diese Ausgabe als Optionsargument zu --infobox dem dialog mitgegeben. Und damit die Shell da nicht schon wieder drangeht, kommen noch mal Anführungszeichen um das ganze. Voilà! <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

Viel Spass noch beim Basteln!

Jochen

Post Reply