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
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
source <datei>
sollte das sein was du suchst!
steve
pornstars-online.de
hi
Das geht folgendermaßen:
Viel SpaßCode:#!/bin/bash . /file/to/be/included.sh
Qudus
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 =(
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:start.sh:Code:#!/bin/bash function testfunc() { echo "hallo" }Hoffe, geholfen zu habenCode:#!/bin/bash . $(dirname $0)/functions.res testfunc
Geändert von Qudus (17-03-2005 um 13:03 Uhr)
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.
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 :
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...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 }
Beide Dateien sind auch ausführbar...
Ich raffs einfach net, warums net geht =//
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.
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
Liegt es vielleicht daran, dass deine ersten beiden Zeilenlauten? Die Datei muss mit #! beginnen, damit der Kernel weiss, dass es eine Skriptdatei ist.Code:# #!/bin/bash
Hi!
Ü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.Zitat von Joghurt
Gruß
fuffy
she-bang wertet der loader aus:Zitat von fuffy
$ 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
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.Zitat von Joghurt
-j
Lesezeichen