[linux-l] Datum in Script verwenden

Volker Grabsch vog at notjusthosting.com
Mo Apr 9 18:40:50 CEST 2007


On Mon, Apr 09, 2007 at 03:38:24PM +0200, Pascal Volk wrote:
> * Am Mo, 09 Apr 2007 schrub Volker Grabsch:
> > 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.

Mir war nicht bewusst, dass ich schlecht zitiert habe. Was konkret
hätte ich besser machen können/sollen?

> Aber statt mit der «alten Leier» zu kommen, entschied ich mich
> dafür, ein Bsp. zu liefern.

Da hast du recht, das hätte ich besser würdigen sollen. Entschuldige
bitte.

> > 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.

Dann stimmt er auch mit dem 'vermutlich'. Denn dass es eine Vermutung
meinerseits war, entspricht ebenfalls der Wahrheit.

> > 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?

Weil ich früher mal in die selbe Falle getappt bin. Dennoch habe ich
es sicherheitshalber nochmal ausprobiert, bevor ich dich kritisierte.

> Hättest Du es vorher einfach selber
> probiert, wüsstest Du, dass es nicht so ist.

Das hatte ich. Hier mein konkreter Testlauf:

$ cat <<EOF >testscript
#!`which bash`
echo "hallo"
EOF

$ cat testscript
#!/bin/bash
echo "hallo"

Ich habe diese Kommandos in der bash, dash und zsh getestet. Bei mir
läuft Debian/Etch. In welcher Shell arbeitest du?

> > 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.

Jap. Bei mir konkret war es ein kleiner Patch für ein Makefile, den ich in
einer Howto in dem Stil

    patch <<EOF
    ...
    EOF

einpflegen wollte. Ging natürlich nach hinten los, weil ich vergaß,
die $-Zeichen als \$ zu escapen.

Normalerweise hätte ich da stattdessen ein 'sed' produziert, das drückt
viel direkter aus, was man will. Aber das 'sed' unter Solaris hat
nervigerweise keine Option "-i".

Auf jeden Fall bin ich bei Here-Dokumenten (d.h. "<<EOF" - Konstruktionen)
seitdem sehr vorsichtig.

> > > 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.

Ja, sorry. Ich habe zwar erstmal alle direkten Antworten überprüft,
ob dich schon jemand korrigiert hat. Aber weil das nicht der Fall
war, habe ich es eben selbst getan.

Als ich dann im Thread weiter las, bemerkte ich, dass du viel später
nochmal, im Nachhinein, korrigiert wurdest.

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

Da sind mind. 4 dumme Sachen drin, die jede für sich schon tausendfaches
LARTen rechtfertigen. ;-)

(1. der Versuch, /tmp zu löschen, 2. dass in Wirklichkeit sogar /
gelöscht wird, 3. dass die Sicherheitsabfrage erst hinterher kommt,
4. dass die Sicherheitsabfrage nur dann kommt, wenn das Kommando
erfolgreich abgearbeitet wird)

Woher hast du das? Ist dieser Code mal real aufgetaucht?


Viele Grüße,

    Volker

-- 
Volker Grabsch
---<<(())>>---
Administrator
NotJustHosting GbR



Mehr Informationen über die Mailingliste linux-l