Vielleicht schaue ich das falsch an .. Aber hier habe ich was ich versuche zu tun. Mache den größten Teil meiner Arbeit mit Java, aber wechsele einfach zu einer Unix (Bash) -Umgebung. Ich mache das:
[~/Desktop/bashPlay]% cat myFunc
#!/bin/bash
ls2(){
echo "Hello World"
}
ls3(){
echo "Testing"
}
echo "this is a test"
ls2 # this calls a function
[~/Desktop/bashPlay]% myFunc
this is a test
Hello World
Ich habe aber zwei Funktionen in meiner Datei und möchte sie getrennt von der Kommandozeile aufrufen können. Dh myFunc.ls2()
oder auch nur ls2
. Ich weiß, dass ich die Funktionen zu meiner .bashrc
Datei hinzufügen kann, aber gibt es eine andere Möglichkeit, diese Funktionen auszuführen, ohne sie zu meiner hinzuzufügen .bashrc
?
Ein anderer Ansatz wäre, ein Skript mit dem Namen
functions.sh
(beispielsweise im~/bin
Verzeichnis) zu erstellen .In diesem Skript fügen Sie alle Ihre persönlichen Funktionsdefinitionen hinzu (sagen wir, jedes Mal, wenn Sie eine Funktion hinzufügen, fügen Sie sie dieser Datei hinzu ...).
Zum Schluss müssen Sie nur noch die
source ~/bin/functions.sh
Zeile in Ihre.bashrc
Datei einfügen. Auf diese Weise können Sie sie über die Befehlszeile aufrufen,.bashrc
bleiben sauber und haben einen bestimmten Platz für Ihre persönlichen Funktionen.quelle
Wenn Sie wie ich sind, möchten Sie Ihre Umgebung nicht mit Funktionen überladen. Sie haben auch eine Gruppe von Funktionen, die hinsichtlich ihrer Funktion zusammengehören. Daher ist es sinnvoll, sie in derselben Skriptdatei zu speichern. (Ich weiß, dass ein Ordner mit mehreren Dateien den gleichen Zweck erfüllen kann). Hier ist eine mögliche Lösung, mit der Sie eine bestimmte Funktion im Skript aufrufen können:
quelle
source
weil es zwei Funktionen mit dem gleichen Namen in zwei verschiedenen sh-Dateien verarbeiten kann. Ich verfeinerte es eine beliebige Anzahl von Parametern zu behandeln durch den Austausch$1 $2 $3 $4 $5
mitFUNC_CALL=$1; shift; $FUNC_CALL "$@"
"$@"
. PS Ihr Ansatz ist eigentlich falsch; Der letzte Teil sollte sein"$FUNC_CALL" "$@"
(dh$FUNC_CALL
sollte in Anführungszeichen stehen)."$FUNC_CALL"
?Der Punktoperator oder der
source
eingebaute Operator entsprichtbash
derimport
Anweisung in Java.Sie können mehr über den Punktoperator oder den
source
eingebauten lesen .quelle