Bash OpenSuse Raspberry

  • Hallo bin Neu auf dem Forum und könntet ihr mir bitte weiterhelfen

    Habe eine grundsätzliche Frage ist es möglich dass Skripts von Opensuse auf dem Raspberry nicht laufen?

    For Schleifen bringen Fehlermeldungen habe dies durch eine While Schleife ersetzt

    If ": Do: not found"

    und so weiter

    Was muß ich prinzipiell beachten dass es im Raspberry läuft?

    Danke im Voraus

    Idefix

  • Danke für die Antwort

    Anders formuliert ein einfaches Beispiel (das Skript läuft unter Opensuse)

    Opensuse

    Hingegen beim Raspberry

    selbe Code

    Antwort:

    Code
    Do 19.04.18 - 19:00:10  Das: ist : ein Test : 2
    Do 19.04.18 - 19:00:10  Das: ist : ein Test : 2
    x.sh: 16: x.sh: [[: not found
    ist gleich

    was ist hier falsch das selbe bei "for" Schleifen

    Habe auch noch bei verschiedenen und und oder Verknüpfungen, dort das selbe

    Code
     if [[ $y != $x ]] || [[ $a != $b ]]

    Wie kann ich das Problem lösen?

    Danke im Voraus

    Idefix

  • Auf den ersten Blick fehlt mir in Deinem Script der sogenannte Shebang in der ersten Zeile, der dem System mitteilt, unter welchem Interpreter das Script ausgeführt werden soll. Also praktisch so etwas:

    !#/bin/bash

    Bei diesem Script handelt es sich offenbar um ein bash-Script, was ich als Linux-Noob anhand der beiden Shebangs #!/bin/sh und #!/bin/bash in Deinem Script auf meinem Linux-Mint-Laptop herausgefunden habe. Linux Mint ist wie Raspbian (oder auch Ubuntu) ein Abkömmling von Debian und zumindest damit werden Scripte ohne Shebang mit der klassischen Shell /bin/sh abgearbeitet. Wie das bei Opensuse ist, weiß ich nicht:


    EDIT:

    ich merke gerade, die neue Forensoftware zeigt (zumindest auf meinem PC) den Shebang nicht an...

    In der ersten Zeile muss stehen:

    #!/bin/bash

  • Sorry Sie haben recht

    habe ich beim ausschneiden des Code vergessen aber ist enthalten im Skript enthalten

    trotzdem kommt die Fehlermeldung

    Gruß Idefix

  • oooo nein der wird einfach weggelassen, habe es gerade noch ein mal probiert und wieder das selbe, wenn ich den Beitrag bearbeite ist er wieder vollständig, reicht es wenn ich es enthalten habe oder muß ich die Datei hochladen, uum mir weiterhelfen zu können

    Gruß Idefix

  • Hallo Idefix,

    Der Shebang erscheint nur in der grafischen Darstellung durch die Forensoftware nicht. Wichtig ist, dass die erste Zeile der tatsächlichen Scriptdatei eine Shebang-Zeile ist!

    Den Fehler(?) in der Forensoftware habe ich hier gemeldet.

    schlizbäda

  • Möglicherweise verwendet Suse eine andere Shell (csh ?) mit einer anderen Syntax der for Bedingung. Die andere Shell könnte am pi aber nachinstalliert werden.

    Die vom pi verwendete bash erwartet die Testbedingung schon nach einem [

    Siehe < man [ >


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Möglicherweise verwendet Suse eine andere Shell (csh ?)

    Hi,

    das kann ich mir zwar nicht vorstellen, aber auch nicht ausschließen, vielleicht schaut der TE mal einfach nach?

    echo $SHELL

    “Don’t comment bad code - rewrite it.”

    Brian Kernighan

  • Auch wenn im geöffneten Terminalfenster /bin/bash läuft, so ist das mitnichten innerhalb von gestarteten Scripts zwingend der Fall! Irgendwo in den Tiefen des Linux-Systems wird das exakte Verhalten in irgendwelchen *.conf-Dateien (oder so) definiert. Konkret weiß ich das leider nicht, da ich ein waschechter und bekennender Linux-Dauernoob bin.

    Auf jeden Fall muss auf dem RPi der Shebang #!/bin/bash in die erste Zeile des Scriptes eingefügt werden. Schadet selbst dann nicht, wenn man damit die Standard-Shell spezifizieren sollte.

    Wenn es dann immer noch nicht funktioniert, ist die Ursache des Problems eine ganz andere!

    schlizbäda

  • Hi,

    und du bist dir sicher, dass auf dem Raspberry auch die Bash als Standardshell verwendet wird?

    Edit: alternativ mal das Script so starten: bash <scriptname.sh>

    BTW: du möchtest den Inhalt von String x, und y vergleichen, dann würde ich grundsätzlich diese Syntax verwenden:

    “Don’t comment bad code - rewrite it.”

    Brian Kernighan

  • echo $SHELL

    Antwort=

    /bin/bash

    Ja, das ist die Standard Shell des angemeldeten ISuse) Users.

    Das Problem ist, dass wir die erst Zeile Deines Scipts von Beitrag #3 nicht sehen (Forensoftware Feature/Fehler) und genau dort steht nach #! die vom Scipt verlangte Shell drinnen.

    Mit einfachen eckigen Klammern sollte die Testbedingung auswertbar sein.

    Ein Testprogramm mit doppelten Klammern gibt es bei der Linux-Pi (Debian) Standardinstallation nicht.

    Da gibt :~$ whereis [

    [: /usr/bin/[ /usr/share/man/man1/[.1.gz aus, und :~$ whereis [[ nichts

    Am Suse Linux wird ein erweitertes Testprogramm [[ installiert sein, zusammen mit anderen Shells.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Was passiert denn, wenn Du auf beiden Systemen das Skript explizit mit bash <Skriptname> aufrufst? Dann sollte das Verhalten eigentlich identisch sein.

    Ansonsten: Stell mal an den Anfang des Skripts ein ls -l /proc/$$/exe. Dann siehst Du, welches binary das Skript tatsächlich ausführt.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!