nach Wiederintriebnahme "unary operator expected" Was tun???

  • Hallo
    Nach einem 6monatigen Auslandsaufenthalt wollte ich heute meinen vdr wieder in Betrieb nehmen. Leider gibt's beim Start folgende Meldung:


    file system check
    /etc/init.de/rcStart: line 64: [: ==: unary operator expected
    /etc/init.de/rcStart: line 68: [: ==: unary operator expected


    Vorher hat der VDR ohne weiter Probleme funktioniert. Die Festplatte scheint ok zu sein, zugriff von einem anderen PC aus möglich.


    Was kann ich tun?



    Wäre nett, wenn Jemand nen Tip hätte.

  • Moin!


    Was steht denn in der Datei an den betreffenden Stellen? Am besten mit ein paar Zeilen drum rum posten oder gleich die ganze Datei, wenn sie nicht zu lang ist.


    mini.

  • Hier ist der entsprechende Code. Schon komisch, wenn sich daran bei ausgeschaltetem vdr was geändert hätte.



    59 # enabling dma
    60 progress 10 "turn dma on"
    61 for drive in /proc/ide/hd?; do
    62 media=`cat $drive/media`
    63 device="/dev/`basename $drive`"
    64 if [ $media == "disk" ]; then
    65 execute hdparm -d 1 $device
    66 else
    67 if [ x$DMA_ONLY_FOR_DISKS != x"yes" ]; then
    68 if [ $media == "cdrom" ]; then
    69 execute hdparm -d 1 $device
    70 fi
    71 fi
    72 fi
    73 done

  • Moin!


    Ja, entweder das mit dem x, also z.B.


    if [ x$media == "xdisk" ]; then


    oder um die Variable das doppelte Anführungszeichen


    if [ "$media" == "disk" ]; then


    Stalker
    Du solltest dein Script auch anpassen, nur ein Gleichheitszeichen ist definitiv falsch.


    Zum Hintergrund:
    In /proc/ide gibt's für jedes Laufwerk einen Eintrag, z.B. /proc/ide/hda für die erste Festplatte. Das ist ein Link auf ein Verzeichnis z.B. /proc/ide/ide0/hda, wenn die erste Festplatte am ersten IDE-Controller hängt. Darin gibt es eine Datei "media", die mit dem Typ des Laufwerks gefüllt ist ("disk" bzw. "cdrom").
    Wenn es eine Festplatte ist, wird DMA eingeschaltet (execute hdparm...), wenn es ein CD/DVD-Laufwerk ist, wird DMA nur eingeschaltet, falls DMA_ONLY_FOR_DISKS nicht auf "yes" steht (wird vermutlich in /etc/sysconfig o.ä. gesetzt).
    Aus irgendeinem Grund ist die "media"-Datei eines deiner IDE-Laufwerke leer (was nicht sein sollte), weshalb der Vergleich stolpert: an der Stelle von $media steht plötzlich nichts und damit fehlt die linke Seite des Vergleichs.


    Funktionieren noch alle Platten und Laufwerke? Oder wurde eins ausgebaut? Was gibt "ls -la /proc/ide" aus, vielleicht finden wir ja das schuldige Laufwerk...


    mini.

  • Zitat

    Originally posted by mini73
    Stalker
    Du solltest dein Script auch anpassen, nur ein Gleichheitszeichen ist definitiv falsch.


    Reden wir nicht von der Bourne-Shell bzw. einem Nachfolger?
    Wichtig sind die Leerzeichen, x="abc" ist eine Zuweisung, $x = "abc" ist ein Vergleich.


    Siehe "man sh":
    s1 = s2 True if the strings s1 and s2 are identical.


    Der Trick mit X$x ist sinnvoll um Syntaxfehler bei undefinierten Variablen und ein Sicherheitsloch zu vermeiden.


    Nachtrag:
    Es handelt sich um eine Inkompatibilität zwischen bash und dash, die je nach Linux-Distribution und dessen Release als sh verwendet werden. Das wird noch für einigen Spaß sorgen.

  • Moin!


    Stimmt, es gibt ja dupzig verschiedene Shells... Ok, dann müssen wir nur herausfinden, welche steph@vdr benutzt.


    sh --help


    müsste Aussage genug liefern.


    mini.

  • Thx für die Tips. Das ging ja wieder sehr schnell!


    x$media == "xdisk" war die Lösung. Die Variante mit den Anführungszeichen geht nicht. Ich verstehe zwar nicht warum das vorher funktioniert hatte und jetzt auf einmal nicht, aber egal, es funktioniert wieder :)


    Vielen Dank!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!