Functions in ksh und bash

T

Tommy_WY

Mitglied
Hallo zusammen,

ich habe da ein Problem mit der ksh bzw. der bash zu dem Thema functions.

Ich habe ein Script erstellt (ausgeführt in der ksh), welches mehrere Funktionen verwendet.
Da ich die Funktionen auch in anderen Shellscripten verwende, habe ich mir quasi eine function Library erstellt, in dem alle Funktionen abgelegt sind.
Sieht dann ungefähr so aus:
/opt/daten/<mydir>/function

In meinem Script wird dann zunächst der function-Path gesetzt (oder auch in der .profile). In dem Verzeichnis liegt nun meine function "my_function".
Danach lade ich die benötigten Funktionen mit autoload

#!/bin/ksh
#Pfad für Funktionen setzen
FPATH=/opt/daten/<mydir>/function

autoload my_function

#Hauptprogramm
#Aufruf der Funktion my_function
my_function

#entladen aus dem Speicher
unset -f my_function

exit

Nun zum Problem.

In der ksh funzt das wunderbar, aber wie mache ich sowas in der bash.
Ich hab schon im Net gesucht, aber nix gefunden (z. B. bei http://linuxseiten.kg-it.de).
Die Funktionen werden immer nur direkt im Script dargestellt, aber eine Auslagerung ist nicht zu finden.

Für einen Tip wäre ich wirklich sehr dankbar.


Gruss
Tommy

:hilfe2: ?( :think:
 
hab ich jetzt nicht so ganz verstanden, mea culpa.
was meinst du damit?
 
Du schreibst deine Funktionen in eine Datei. (e.g /home/user/funktionen.txt)
Statt autoload nutzt du nun einfach:
Code:
source /home/user/funktionen.txt
Damit hast du sie im Namensraum.

unset wirkt hier genauso.

Und was meinst du mit Auslagerung?

Wolfgang
 
genau das. was du beschrieben hast, also source /home/user/funktionen.txt

in den beispielen wird die function immer im script definiert und auch dort verwendet.
mit auslagern meine ich funktionen irgendwo zentral ablegen, damit man das rad nicht immer wieder neu erfinden muss oder funktionen per copy and paste immer ins script zu kopieren.

muchas gracias, der hinweis hat mir sehr geholfen. jetzt kann ich meine scripte auf die bash umstellen.

danke danke und gruss
tommy
 
in der bash dürfte das afaik niemals funktionieren.

grüße tuxlover
 
in der bash dürfte das afaik niemals funktionieren.

grüße tuxlover

Was funktioniert nicht?

source kannst du nicht gemeint haben.

$ echo 'myfunc () { echo "ich bin es";} >/tmp/funk.txt
$ source /tmp/funk.txt
$ myfunc
ich bin es
$ bash --version
GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.

Du kannst die ganzen Funktionen natürlich auch gleich in dein ~/.bashrc oder ~/.profile schreiben.
Gruß Wolfgang
 
Zuletzt bearbeitet:
jepp danke.
den pfad habe ich mittlerweile eh schon ins profil aufgenommen.

Gruss
Tommy
 
Zurück
Oben