exit-code in script auswerten.



  • HannsW schrieb:

    Hi Doc,
    entschuldige, da hatte ich mich nicht korrekt ausgedrückt.

    Ich habe ein shellscript indem ich nach vielen "vi xxx" das makefile , und danach
    die Zieldatei starte. Bei Makefehlern möchte ich das unterbrechen.
    Hab mir in /etc/init.d/ diverse scroípte angesehen, aber meines klappt doch nicht:

    .....
    #!/bin/bash      // nach supertux
    
    vi mytest.cc
    vi btrieveClass.cc
    vi btrieveClass.hh
    vi aliasArzt.cc
    vi aliasArzt.hh
    make -f mytest.mak
    if ["$1" == "0"]; then
            ./mytest
    fi
    ./makemytest: line 9: [: missing `]'
    

    HM ???? 😞
    Was ist falsch
    Hanns

    if ["$1" == "0"]; then
    

    in

    if [ "$1" == "0" ]; then
    

    ändern. (Die Leerzeichen)

    oenone schrieb:

    HannsW schrieb:

    in meinem MAKEFILE möchte ich abbrechen, sobald eine Aufgabe fehlerhaft war.
    Unter DOs war das ERRORLEVEL.
    Danke Hanns

    der exit-code wird in der Variablen $? gespeichert.

    auf bald
    oenone

    Mist, wenn ich das früher gewusst hätte 😡



  • hättste mal meinen beitrag gelesen :p



  • DrGreenthumb schrieb:

    hättste mal meinen beitrag gelesen :p

    ich geb's auf.... dümmer als heute kann ich nicht mehr werden. 😉



  • supertux schrieb:

    (Die Leerzeichen)

    super supertux, danke für die Lehr-Zeichen 😉
    geht allerdings auch ohne

    #!/bin/bash
    

    weil der Pfad auf die bash schon in meinem Profil steht 😕 oder?



  • Es geht auch ohne #!/bin/bash aber bash muss nicht unbedingt unter /bin/bash installiert sein. Die erste Zeile ist dazu da, dass wenn man eine Datei ausführt (./script), dass auch den richtigen Interpreter genommen wird. bash und sh sind recht ähnlich, aber nicht gleich und wenn du das #!/bin/sh weglässt und das script ausführst, dann bekommst du auch Fehler. Natürlich wenn du sh script.sh ausführst, wird es kein Problem geben. Deswegen ist es ratsam immer den Interpreter anzugeben, damit ist man auf jeden Fall sicher, dass alles reibungslos läuft.



  • herzlichen Dank, und gute Nacht, bin dann mal ein bißchen weg vom Rechner



  • Was passiert, wenn du #!/bin/bash nicht angibst, ist Shell abhängig. Teilweise wird #!/bin/sh augerufen und teilweise die aktuelle shell benutzt. Wobei du bei nicht Standardkompatiblen Dingen aufpassen musst, da /bin/sh nicht immer auf die bash zeigt. So installieren viele Leute kleinere Shells ((D)ASH) um das booten zu beschleunigen. Andere Unix-Derivate benutzen andere Shells oder die Benutzer benutzen Shells ala ZSH.

    Also bitte immer den Ausführstring setzen.

    http://www.ohse.de/uwe/articles/hash-bang.html



  • Danke, soweit sacheint es bei mir angekommen zu sein.in der aktuellen Form

    #!/bin/bash
    
    vi mytest.cc
    vi btrieveClass.cc
    vi btrieveClass.hh
    vi aliasArzt.cc
    vi aliasArzt.hh
    make -f mytest.mak
    echo $1
    if [ "$1" == "0" ]; then
            ./mytest
    fi
    

    wird mytest nie ausgeführt 😕
    Der echo befehl auch nicht. Ich hatte dann gedacht. daß "echo" mir einen Fehlercode > 0 liefert, und es rausgenommen, aber keine Änderung.
    Hanns



  • Lies dir nochmal ganz genau dieses Posting durch:

    DrGreenthumb schrieb:

    proga && progb

    b wird nur ausgeführt wenn a erfolgreich (errorcode=0) war

    proga || progb

    b wird nur ausgeführt wenn a nicht erfolgreich (errorcode!=0) war

    Ansonsten steht in der Variable $? der Rückgabewert.

    Edit: Ein Makefile bricht doch ohnehin ab, wenn irgendwas schief geht

    Daraus kann man entnehmen, dass

    1. Der Rückgabewert nicht in $1 sondern in $? steht
    2. \begin{verbatim}make -f mytest.mak && ./mytest\end{verbatim} sowieso viel einfacher ist.



  • mastercpp schrieb:

    Daraus kann man entnehmen, dass

    1. Der Rückgabewert nicht in $1 sondern in $? steht
    2. \begin{verbatim}make -f mytest.mak && ./mytest\end{verbatim} sowieso viel einfacher ist.

    Das ist mir jetzt richtig unangenehm- nicht richtig lesen zu können-
    Gilt "Gleitsichtbrille" als Ausrede?

    und 2.) ist eh viel schöner
    Habt Dank


Anmelden zum Antworten