Skocz do zawartości

Bash: Import Funkcji A->b->c->


borzole

Rekomendowane odpowiedzi

Witam,

Chciałem sobie zrobić małą bibliotekę funkcji dla bash i uparłem się żeby import do skryptu był jak najprostszy.

 

1. biblioteka

bslstd

echo "jestem bslstd"
function bsHelp(){
  echo "test z $0"
}

 

2. pani bibliotekarka ;) czyli skrypt pośredniczący

bsimport

#!/bin/bash
  echo "Ms Dewey"
  if [ -f /usr/local/sbin/$@ ]; then
     . /usr/local/sbin/$@
     echo $?
else
     echo f*ck!
fi

 

3. jakiś szybki skrypcik

robaczek

 #!/bin/bash
       
bsimport bslstd
     
bsHelp

 

Rezultat

 ./robaczek
Ms Dewey
jestem bslstd
0
/usr/local/sbin/silnik: line 8: bsHelp: nie znaleziono polecenia

 

O ile polecenie dotrą do 3 pliku, to funkcje i parametry nie. Dlaczego?

Może macie jakiś inny intuicyjny sposób na import "biblioteki" bez podawania za każdym razem ścieżki.

Odnośnik do komentarza
Udostępnij na innych stronach

O ile polecenie dotrą do 3 pliku, to funkcje i parametry nie. Dlaczego?

Może macie jakiś inny intuicyjny sposób na import "biblioteki" bez podawania za każdym razem ścieżki.

 

Bo wywołujesz plik a nie go includujesz:

source mojabiblioteka.sh

 

 echo f*ck!

Jaki user friendly komunikat :P

 

Odnośnik do komentarza
Udostępnij na innych stronach

ehh, tak to jest jak się nie myśli. Ten plik pośredniczący przecież niczemu nie służy i nie wiem skąd mi się ubzdurało, że jest potrzebny (chciałem tam wrzucić obsługę błędów, wyszukiwanie biblioteki itp. kosmetyczne funkcje). Jeśli biblioteka jest w ścieżce i ma atrybut +x to zwykłe source plik wystarcza. Także najpierw trzeba się przespać, a potem pisać temat na forum, żeby na drugi dzień takich kwiatków nie było :)

 

Nie mniej 'wciągnięcie" funkcji z A do C bez użycia komendy "source" w C jest wciąż otwartym pytaniem, tyle ze zastosowania nie ma :)

Odnośnik do komentarza
Udostępnij na innych stronach

.   /sciezka/nazwa_skryptu.sh

no to znam, a qmic mi wyjaśnił różnice między "." a "source" bo wcześniej myślałem że to stosuje się zamiennie (choć nadal nie wiem co to właściwie zmienia). Z tym, że jak podajesz pełną ścieżkę to "skrypt-biblioteka" nie musi być wykonywalny. Atrybut "wykonywalny" nadaję tylko dlatego, że to pozwala automatycznie znaleźć plik w ścieżkach systemu, więc nie martwię się o to gdzie on jest.

 

[EDIT]

1. a tak w ogóle to jest coś w rodzaju unsource plik ?

 

2. ma ktoś gotową funkcję do pobierania parametrów z plików użytkownika? Chodzi mi o pliki np.

[kategoria]
   ustawmnie = 18

 

[EDIT]

tak z grubsza o co mi chodzi:

 # pobranie parametru z pliku konfiguracyjnego
#     getParam file parametr
function getParam(){
     file=$1
     param=$2
     # czy istnieje plik z parametrami
     if [ -f $file ]; then
         # każda linia z "#" jest pomijana
         tmp=`cat $file | grep -v \# | grep $param | grep = |cut -d'=' -f2-`
         #@TODO
         # if $param PUSTE to ERROR
         return $tmp
     else
         echo -e "Nie ma pliku: $file \n parametr pobrany: NIE "
         return 1;
     fi
}
# zapis parametru do pliku 
#        setParam file parametr wartość
function setParam(){
     file=$1
     param=$2
     wartosc=$3
     # czy istnieje plik z parametrami
     if [ -f $file ]; then
         # @TODO
         # add: obsługa spacji, teraz zakłada brak spacji
         # nie szanuje na razie :) zakomentowanych parametrów
         
         # usunięcie lini z tym parametrem
         sed -e "/$param=/d" $file -i     2>/dev/null
         # wstawienie nowej
         echo -e "$param=$wartosc" >> $file
     else
         # tworzenie pliku i wpisu
         echo -e "$param=$wartosc" > $file
     fi
}

jak tu zaimplementować obsługę [kategorii]? Jeśli w różnych kategoriach pojawi się taka sama nazwa parametru np. "wysokość". Trochę z sed musiałbym poeksperymentować, ale może ktoś już walczył z obsługą parametrów z takich plików

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chodzi o "." i "source" to nie ma znaczenia, bo są to równorzędne polecenia → "man source" m.in.

. filename [arguments]

source filename [arguments]

Read and execute commands from filename in the current shell

environment and return the exit status of the last command exe-

cuted from filename.

 

Dobre źródło wiedzy jak się bawić z includowaniem funkcji stanowią skrypty w /etc/init.d oraz biblioteka (chyba tak można to nazwać?) "functions". Niemal każdy ze skryptów w tym katalogu na początku woła ". /etc/init.d/functions".

Odnośnik do komentarza
Udostępnij na innych stronach

ja tam lubię dwa kółka :rolleyes:

 

Gdyby użytkownicy Linuksa spędzali swoją produktywność na generowaniu nowych rzeczy a nie pisaniu 15 serwera dźwięku to Linux by się rozwijał dużo szybciej

Odnośnik do komentarza
Udostępnij na innych stronach

1. mała biblioteka dla siebie, jak mała piwniczka z winem :)

 

2.

Gdyby użytkownicy Linuksa spędzali swoją produktywność na generowaniu nowych rzeczy a nie pisaniu 15 serwera dźwięku to Linux by się rozwijał dużo szybciej

Gdyby to wszystko jeszcze miało ręce i nogi to może. Jeśli jest 15 edytorów tekstu, które prawie nic nie robią i mają podobny opis to jak tu wspierać taki projekt. Żaden się nie wybije bez odrobiny szczęścia. Podobnie masakryczna jazda z playerami. Wszystkie identyczne.

 

Tak naprawdę to myślę, że poprostu brak scentralizowanej organizacji, która by wytaczała cele i oficjalnie wspierała dany projekt, kasując pozostałe jako "gupie pomysły" i " już tu nie pracujesz". No ale wolność ponad wszystko robi swoje i widać że tyrania w firmie, gdzie jest jakiś przełożony, robi swoje.

brak planu = brak rezultatów

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli jest 15 edytorów tekstu, które prawie nic nie robią i mają podobny opis to jak tu wspierać taki projekt.

 

 

jak to nic nie robia? a gadales z emacsem ?:D bo ja tak :) fajny z niego koles ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...