Re: Seltsames Verhalten von echo

Autor: Thomas Stiefel <tom_at_vtux.de>
Datum: Fri, 20 May 2011 15:44:40 +0200
Markus Demleitner schrieb am 20.05.2011 08:03:

> richtige Frage: "*Welches* echo verhält sich, na ja, komisch?".
>
> Während nämlich echo (1), also in der Regel /bin/echo in der Manpage
> sagt
>
>      -E     disable interpretation of backslash escapes (default)
>
> ist das, was du bekommst, wenn du dein Skript so schreibst, wie du es
> schreibst, das bash-builtin.  Über das erfährt man in help echo:
>
Es ist definitiv ein Quoting Problem und es wird auch ziemlich sicher 
das bash-builtin verwendet - außer Du hast im Script ein echo definiert, 
aber danach sieht es nicht aus.
Ansonsten gilt immer folgende Reihenfolge:

shell-builtin > Alias > Binary (je nach PATH-Reihenfolge)

Wenn du es genau wissen willst, dann liefert dir das der Befehl "type 
echo". Hier ein kleines Beispiel dazu:

$  type echo; alias echo='/bin/echo'; type echo; unalias echo; type echo
echo is a shell builtin
echo ist ein Alias von `/bin/echo'.
echo is a shell builtin

> Es gibt viele Möglichkeiten, das zu fixen (%s#echo#/bin/echo im vi
> ist eine davon), aber ich würde wahrscheinlich zu einem Here-document
> raten, so wie das gemacht ist.
>
Du könntest also zuerst mal versuchen alle echo-Aufrufe in deinem Script 
durch "echo -E" zu ersetzen.

Da in den Beispiel bei den viele Zeilen fast alles bleiben soll wie es 
ist und nur in einer Zeile variabler Text ($1) auftaucht würde ich auch 
das Here-Dokument oder gleich ein externes File mit dem Text erstellen, 
dort einen Platzhalter (z. B. "_TEXT1_") einbauen und nur diesen mit sed 
durch den Inhalt von $1 ersetzen lassen. Also etwa so:

TEXTEMPLATE="create.tpl"
CREATETEX="create.tex"

createtitle()
{
cat $TEXTEMPLATE | sed ...
}

> Aber zwecks due diligence: Shellskripts als CGI-Backends verlangen
> viel Sorgfalt bei der Input-Validierung, und wenn du Eingaben aus dem
> Netz in TeX übernimmst, solltest du dran denken, dass TeX
> Turing-vollständig ist und Zugriff auf dein Dateisystem hat.
>
FULL ACK!
Wenn das wirklich von Webserver aufgerufen wird, dann würde ich lieber 
versuchen das durch Systemaufrufe in PHP direkt zu handlen oder noch 
besser das Ganze mit Perl abbilden.

Gruß Tom


-- 
UUGRN e.V. http://www.uugrn.org/
http://mailman.uugrn.org/mailman/listinfo/uugrn
Wiki: https://wiki.uugrn.org/UUGRN:Mailingliste
Archiv: http://lists.uugrn.org/
Empfangen am 20.05.2011

Dieses Archiv wurde generiert von hypermail 2.2.0 : 20.05.2011 CEST