[linux-l] Datum in Script verwenden

Pascal Volk linux-l at edelhost.de
Mo Apr 9 15:38:24 CEST 2007


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi Volker,

* Am Mo, 09 Apr 2007 schrub Volker Grabsch:
> Hi Pascal,
> 
> ich muss jetzt leider wieder einmal mit der alten Leier kommen ...
> probiert eure Sachen bitte vorher selbst aus!

So ähnlich dachte ich mir das auch, als Ivan F. Villanueva B. in
20070408120920.GB23184 at golem seine Frage stellte. Das würde man
sogar in Deiner Mail erkennen, wenn Dein Zitierstil etwas brauchbarer
wäre.
Aber statt mit der «alten Leier» zu kommen, entschied ich mich
dafür, ein Bsp. zu liefern.

> On Sun, Apr 08, 2007 at 02:44:34PM +0200, Pascal Volk wrote:
> > Ähnliches ist eher besser, das mit which ist ein Schuss in den Ofen:
> >     cat >> testscript << "EOF"
> >     #!`which bash`
> >     echo "hallo"
> >     EOF
> Zur Erklärung: Dieser Befehl soll vermutlich eine Datei namens "testscript"
> erstellen mit folgendem Inhalt:
>     #!`which bash`
>     echo "hallo"

Streiche das 'vermutlich' bitte und schon stimmt Dein Satz inhaltlich.

> Was er aber tatsächlich tut: Er hängt folgende Zeilen an eine Datei
> namens "testscript" an:
>     #!/bin/bash
>     echo "hallo"

Auch das ist falsch.

> In der "<< EOF"-Konstruktion werden nämlich Backticks und Variablen,
> also `irgendwas` und $irgendwas, schon vorher ersetzt.

Wie kommst Du bitte auf diese Idee? Hättest Du es vorher einfach selber
probiert, wüsstest Du, dass es nicht so ist.
 
> Das ist übrigens sehr praktisch, weil man dadurch per Shell-Script
> ein einfaches Template-System realisieren kann.

Wenn es so wäre, wäre es eher schädlich. Stell Dir vor: root erstellt sich
auf oben gezeigte Art schnell ein kleines Script, in dem u.a. auch geprüft
wir, ob $UID gleich 0 ist.
Würde $UID durch roots User ID ersetzt werden, würde im Script geprüft
werden, ob 0 == 0 ist. Aua.

> >     chmod u+x testscript
> >     ./testscript
> >     bash: ./testscript: `which: bad interpreter: No such file or directory
> Ironischerweise würde das Zeug, so wie du es geschrieben hast, sogar
> funktionieren, weil dein Erstell-Befehl in Wirklichkeit eine
> "#!/bin/bash"-Zeile produziert. ;-)

Nein. Siehe oben.

> > Wenn which nicht in /usr/bin ist, dann sollte man wohl davon ausgehen, dass
>        ^^^^^
> > das System kaputt ist.
> Du meinst hier "env", nicht "which", richtig?

Richtig. Aber das schrieb ich ja bereits.

> > rm -Rfv /tmp/../ && echo "are you sure???"
> *gg* der ist gut! Ist mir erst jetzt in deiner Sig aufgefallen.

Nein, das ist böse™.


Gruß
Pascal
- -- 
rm -Rfv /tmp/../ && echo "are you sure???"

Die BeLUG im IRC:
irc://irc.freenode.net/#belug
 ____ ____ ____ ____ ____ _________ ____ ____ ____ ____ ____ ____ 
 ||/ |||j |||o |||i |||n |||       |||# |||b |||e |||l |||u |||g ||
 ||__|||__|||__|||__|||__|||_______|||__|||__|||__|||__|||__|||__||
 |/__\|/__\|/__\|/__\|/__\|/_______\|/__\|/__\|/__\|/__\|/__\|/__\|

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQFGGkHQNx2k6gsBqqkRAhesAJ49FE5zMhHXugiyh4SkXmC5ctoHjwCeJoea
cvSpOJBQS65EBR+Y9PbWQ7o=
=x4/H
-----END PGP SIGNATURE-----



Mehr Informationen über die Mailingliste linux-l