Może patrzę na to w niewłaściwy sposób ... Ale tutaj staram się to zrobić. Większość pracy wykonuję w Javie, ale po prostu przełączyłem się na środowisko uniksowe (bash). Robię to:
[~/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
Ale w moim pliku są dwie funkcje i chcę móc je wywoływać niezależnie od wiersza poleceń. Tj .: myFunc.ls2()
a nawet po prostu ls2
. Wiem, że mogę dodać funkcje do mojego .bashrc
pliku, ale czy jest jakiś inny sposób na wykonanie tych funkcji bez dodawania ich do mojego .bashrc
?
Innym podejściem byłoby utworzenie skryptu o nazwie
functions.sh
(~/bin
na przykład w katalogu).W tym skrypcie dodajesz wszystkie osobiste definicje funkcji (powiedzmy za każdym razem, gdy dodajesz funkcję, dodajesz ją do tego pliku ...)
Na koniec musisz po prostu dodać
source ~/bin/functions.sh
linię do swojego.bashrc
pliku. W ten sposób będziesz mógł wywoływać je z wiersza poleceń,.bashrc
pozostaniesz czysty i będziesz mieć określone miejsce na swoje osobiste funkcje.źródło
Jeśli jesteś podobny do mnie, nie chcesz zaśmiecać swojego środowiska funkcjami. Masz również grupę funkcji, które należą do siebie pod względem tego, co robią, więc umieszczenie ich w tym samym pliku skryptu ma sens. (Wiem, że folder z wieloma plikami może służyć temu samemu celowi). Oto możliwe rozwiązanie, które pozwala wywołać określoną funkcję w skrypcie:
źródło
source
ponieważ może obsłużyć dwie funkcje o tej samej nazwie w dwóch różnych plikach sh. I rafinowany go obsługiwać dowolną liczbę parametrów, zastępując$1 $2 $3 $4 $5
zFUNC_CALL=$1; shift; $FUNC_CALL "$@"
"$@"
. PS Twoje podejście jest w rzeczywistości złe; ostatnia część powinna być"$FUNC_CALL" "$@"
(tj.$FUNC_CALL
powinna być w cudzysłowie)."$FUNC_CALL"
?Operator kropkowy lub
source
wbudowanybash
jest analogiczny doimport
instrukcji w Javie.Możesz przeczytać więcej o operatorze kropkowym lub
source
wbudowanym .źródło