Anzeige:
Ergebnis 1 bis 14 von 14

Thema: mit der bash include

  1. #1
    Blackcollar
    Gast

    mit der bash include

    Servus Leutz,
    habe folgendes Problem :
    ich habe eine Datei in der alle Funktionen stehen.
    Nun soll diese Funktion in das Ablaufscript includet werden.
    Ich habe schon einiges probiert und hänge fest =//

    Hoffe ihr könnt mir helfen ^^


    greetz Damon

  2. #2
    Registrierter Benutzer
    Registriert seit
    26.12.2001
    Beiträge
    228
    source <datei>

    sollte das sein was du suchst!
    steve
    pornstars-online.de

  3. #3
    Registrierter Benutzer Avatar von Qudus
    Registriert seit
    14.03.2005
    Beiträge
    101
    hi

    Das geht folgendermaßen:

    Code:
    #!/bin/bash
    
    . /file/to/be/included.sh
    Viel Spaß

    Qudus

  4. #4
    Blackcollar
    Gast
    hm... irgendwie geht das leider nicht =((

    habe folgende Konstellation :

    start.sh
    functions.res

    sodele ... in der functions.res stehen die bash funktionen. Die soll nun im start.sh eingebunden werden, damit ich aus der start.sh heraus die funktionen starten kann.

    Irgendwie klappt das net so ganz =(

  5. #5
    Registrierter Benutzer Avatar von Qudus
    Registriert seit
    14.03.2005
    Beiträge
    101
    Wichtig ist, dass Du in beiden Dateien in der ersten Zeile #!/bin/bash oder wenigstens #!/bin/sh stehen hast. Dann sollte das auch so klappen. Die Variante von Badsteve kenne ich nicht. Es mag aber sein, dass das auch funktioniert. Oder es ist eine andere Sprache. Aber definitiv weiß ich, dass man mit dem Punkt eine Datei in bash included!

    Eventuell rufst Du das Skript auch von einem anderen Pfad auf. Dann stimmen eventuell die relativen Pfadangaben nicht mehr. Mir $0 kannst Du den Skriptnamen mir relativem Pfad auslesen und mit dirname auf den reinen Pfad zugreifen. Klingt jetzt vielleicht etwas kompliziert, aber nimm einfach das folgende Beispiel. Darin gehe ich davon aus, dass die beiden Dateien im selben Verzeichnis liegen!

    Beachte, dass nach dem Punkt ein Leerzeichen kommen muss.

    functions.res:
    Code:
    #!/bin/bash
    
    function testfunc()
    {
        echo "hallo"
    }
    start.sh:
    Code:
    #!/bin/bash
    
    . $(dirname $0)/functions.res
    
    testfunc
    Hoffe, geholfen zu haben
    Geändert von Qudus (17-03-2005 um 13:03 Uhr)

  6. #6
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    nee, in functions.res ist das #!/bin/bash überflüssig.

    @Blackcollar, hast du auch ". /pfad/zu/functions.res" und nicht "./pfad/zu/functions.res" geschrieben? (Wenn functions.res im selben Verzeichnis ist, kannst du die Pfadangabe natürlich weglassen)

    "." ist der Standard-Shell befehl für include. bash definiert zusätzlich auch noch das alias "source", um den Code lesbarer und verständlicher zu machen.

  7. #7
    Blackcollar
    Gast
    hm... irgendwie komm ich mir vor, alsob die Bash mich ärgern will =//
    ich post mal meinen Code :
    (start.sh: )
    Code:
    #
    #!/bin/bash
    
    ##############################
    ##
    #   Variablendeklaration
    ##
    ##############################
    
    TITLE="Testserver"
    AY_INFO=`cat hello.res`
    PROGNAME=`cat name.res`
    TEMPDATEI=tmp.$$
    INSTALLSERVER="192.168.0.36"
    INSTALLPFAD="/ServerTest"
    MOUNTTO="/mnt/tmp"
    
    ###############################
    ##
    #  Include der *.res Dateien
    ##
    ##############################
    
    
    . functions.res
    
    takeOS

    und nu die functions.res :

    Code:
    function takeOS ()
    {
            cat os.list | cut -d "  " -f 1 > tmp1.$$
            echo "#!/bin/bash" > $ChooseOS
            printf "dialog --menu \"Bitte OS waehlen :\" 40 40 25 "> $ChooseOS
            X=1
            Y=`cat os.list | grep -c ""`
            while [ $X -le $Y ]
                    do
                            printf " \"$X\" \"`sed -n $X\p tmp1.$$`\" 2>osis.tmp " >> $ChooseOS
                            X=$[$X+1]
                    done
            chmod +x $ChooseOS
            ./$ChooseOS
    }
    so... nun führt er mir die Funktion in der start.sh aba net aus, obwohl ich sie doch direkt nach dem include ausgeführt habe...
    Beide Dateien sind auch ausführbar...
    Ich raffs einfach net, warums net geht =//

  8. #8
    Registrierter Benutzer Avatar von Qudus
    Registriert seit
    14.03.2005
    Beiträge
    101
    ich hab jetzt deinen Code zwar nicht getestet, was man auch noch tun könnte. aber hast Du mal versucht anstatt ". include.res" ". ./include.res" zu schreiben. k.A., ob das was ausmacht. hab noch nie selbst was mit includes gemacht.

  9. #9
    Registrierter Benutzer
    Registriert seit
    26.12.2002
    Ort
    Matrix
    Beiträge
    194
    das funktioniert wie gewünscht:

    $ cat a.sh
    #!/bin/sh
    . ./b.sh
    f

    $ cat b.sh
    function f () { echo "yep"; }

    $ sh a.sh
    yep


    gbt es irgendwelche fehlermeldungen? mal mit 'sh -x' ausgeführt?

    -j

  10. #10
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Liegt es vielleicht daran, dass deine ersten beiden Zeilen
    Code:
    #
    #!/bin/bash
    lauten? Die Datei muss mit #! beginnen, damit der Kernel weiss, dass es eine Skriptdatei ist.

  11. #11
    Registrierter Benutzer
    Registriert seit
    10.02.2005
    Ort
    Hückelhoven
    Beiträge
    26
    Hi!

    Zitat Zitat von Joghurt
    Die Datei muss mit #! beginnen, damit der Kernel weiss, dass es eine Skriptdatei ist.
    Übernimmt das nicht die Shell, falls der Shebang fehlt? Und da er das Skript wohl aus der bash heraus startet, wird es auch von der bash verarbeitet.

    Gruß
    fuffy

  12. #12
    Registrierter Benutzer
    Registriert seit
    26.12.2002
    Ort
    Matrix
    Beiträge
    194
    Zitat Zitat von fuffy
    Übernimmt das nicht die Shell, falls der Shebang fehlt? Und da er das Skript wohl aus der bash heraus startet, wird es auch von der bash verarbeitet.
    she-bang wertet der loader aus:

    $ cat a.sh
    echo $@

    $ cat b.sh
    #!/bin/sh
    echo $@

    $ cat a.c
    #include <unistd.h>

    int main( int argc, char **argv) {
    printf("rc: %i\n", execl(argv[1], argv[1], argv[1], NULL));
    }
    $ ./a a.sh
    rc: -1
    $ ./a b.sh
    b.sh



    -j

  13. #13
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819

    Post

    JFYI, $? enthält den Return-code des letzten Befehls, du hättest dir dein C-Programm also ersparen können

  14. #14
    Registrierter Benutzer
    Registriert seit
    26.12.2002
    Ort
    Matrix
    Beiträge
    194
    Zitat Zitat von Joghurt
    JFYI, $? enthält den Return-code des letzten Befehls, du hättest dir dein C-Programm also ersparen können
    du hast den sinn der demonstration nicht verstanden. es wird demonstriert, dass she-bang nicht durch die shell ausgewertet wird. der returncode ist nebensächlich.


    -j

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •