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
(?Vieleicht?) kleines Scriptproblem ...
Re: (?Vieleicht?) kleines Scriptproblem ...
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
: 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
Re: (?Vieleicht?) kleines Scriptproblem ...
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
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
Re: (?Vieleicht?) kleines Scriptproblem ...
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
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