[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Seltsames Verhalten von echo
[Thread Prev] | [Thread Next]
- Subject: Re: Seltsames Verhalten von echo
- From: Thomas Stiefel <tom@xxxxxxx>
- Date: Fri, 20 May 2011 15:44:40 +0200
- To: uugrn@xxxxxxxxxxxxxxx
Markus Demleitner schrieb am 20.05.2011 08:03: > richtige Frage: "*Welches* echo verhaelt sich, na ja, komisch?". > > Waehrend naemlich 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. Ueber das erfaehrt man in help echo: > Es ist definitiv ein Quoting Problem und es wird auch ziemlich sicher das bash-builtin verwendet - ausser 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 Moeglichkeiten, das zu fixen (%s#echo#/bin/echo im vi > ist eine davon), aber ich wuerde wahrscheinlich zu einem Here-document > raten, so wie das gemacht ist. > Du koenntest 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 wuerde 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 uebernimmst, solltest du dran denken, dass TeX > Turing-vollstaendig ist und Zugriff auf dein Dateisystem hat. > FULL ACK! Wenn das wirklich von Webserver aufgerufen wird, dann wuerde ich lieber versuchen das durch Systemaufrufe in PHP direkt zu handlen oder noch besser das Ganze mit Perl abbilden. Gruss 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/