Zależy od funkcji. Jeśli jest to po prostu taki super-prosty linijka, możesz utworzyć alias lub włożyć funkcję ~/.bashrc(plik, który bash ładuje się podczas uruchamiania).
Jeśli tworzysz coś bardziej mięsistego, sensowniej byłoby stworzyć własny skrypt wykonywalny, w ~/bin/którym domyślnie nie istniałby (to tylko katalog), ale powinien znajdować się na twojej ścieżce. Pamiętaj, że w tym celu plik będzie musiał być wykonywalny ( chmod +x filename) i zacząć od odpowiedniej #!/bin/bashsekcji.
Druga trasa ma pewne wyraźne zalety:
Łatwiej jest zobaczyć, co jest dostępne
Błąd składni nie spowoduje tankowania Twojego profilu
W przypadku zmiany skryptu nie trzeba ponownie pozyskiwać konfiguracji bash
Jest dostępny dla każdej powłoki, o ile używana jest pełna ścieżka, lub też ~/bin/znajduje się na ścieżce dla tej powłoki (która powinna być w większości przypadków AFAIK).
Użyłem późniejszej opcji. Moja funkcja zawiera polecenia, które usuwają pliki, coś wget, wykonuje polecenia javac i java. a kiedy wypróbowałem to na gnomie, nie działa dobrze. Czy uważasz, że jest jakiś problem?
Abel Melquiades Callejo
Co robi zamiast tego?
Oli
Jest już naprawione. Naprawiono dzięki tej odpowiedzi
Abel Melquiades Callejo,
umm ... czy skrypty użytkownika nie powinny być w tym /usr/local/binzamieszane $PATH?
Braiam
Wydaje mi się, że niewielką, ale wartą wspomnienia zaletą wprowadzania funkcji ~/.bashrc(ponieważ jest to sourced), jest to, że Bash szuka funkcji przed rozpoczęciem wyszukiwania PATH.
Zanna
4
Najlepszym wyborem będzie ~/.bashrcplik.
Możesz zapisać definicje funkcji powłoki bezpośrednio w ~/.bashrcpliku lub, jeśli masz ich wiele i nie chcesz zaśmiecać swojego ~/.bashrcpliku, możesz umieścić je wszystkie w innym wybranym pliku - po prostu upewnij się, że źródło plik w twoim ~/.bashrcpliku. Na przykład, jeśli plik z twoimi funkcjami ma nazwę bash_functions, po prostu dodaj do ~/.bashrcpliku linie:
if[[-f /path/to/bash_functions ]];then
source /path/to/bash_functions
fi
lub równoważnie:
if[[-f /path/to/bash_functions ]];then./path/to/bash_functions
fi
gdzie .jest tylko symboliczną reprezentacją source. Te ifmarki testowe czy plik /path/to/bash_functionsistnieje przed próbą jej źródła.
Ta technika jest bardzo podobna do ustanawiania aliasów ~/.bashrcpoprzez utworzenie pliku o nazwie ~/.bash_aliasesi użycie podobnej składni do powyższej w ~/.bashrccelu przetestowania jego istnienia, a następnie źródła.
dzięki, zadziałało. nawiasem mówiąc, jaka jest różnica z .profile? w niektórych systemach Linux nie mogę umieścić funkcji w bashrc
Abel Melquiades Callejo
2
~/.profileplik jest wykonywany przez interpreter poleceń dla powłok logowania. Gdy korzystasz z GUI i otwierasz terminal, plik ten nie jest wykonywany, ponieważ będziesz w powłoce bez logowania.
Radu Rădeanu,
1
Oto niezbędna procedura deklarowania stałej funkcji:
Otwórz ~/.bashrcplik w edytorze tekstu. Nie ma znaczenia, który edytor tekstu, o ile wiesz, jak go używać i dopóki go otwierasz/home/<username>/.bashrc
Na końcu ~/.bashrcdeklaruj własną funkcję, na przykład:
find_dirs(){
find "$1"-type d
}
Zapisz i zamknij plik.
~/.bashrcPlik jest czytać przy każdym otwarciu interaktywną powłokę (która jest nowa karta terminalu, poprzez logowanie sshlub otwarte tty1 lub inna wirtualna konsola). Nie będzie to dostępne w plikach skryptów, ponieważ ~/.bashrcnie jest odczytywane dla nieinteraktywnych powłok. Nie jest również dostępny, jeśli uruchamiasz bashz --norcopcją.
Jeśli chcesz, aby funkcja była natychmiast dostępna na aktualnie otwartej karcie, użyj source ~/.bashrcpolecenia.
Funkcje przyjmują argumenty tak jak zwykłe polecenia. Na przykład, $1poprzez $9wskazuje parametry pozycyjne podczas wywoływania funkcji. W powyższym przykładzie find_dirsbierze tylko jeden parametr pozycyjny i będzie wywoływany jako find_dirs /etc. Możesz także użyć, $@aby odwołać się do wszystkich parametrów pozycyjnych. Funkcje akceptują również przekierowanie. Możesz wywołać funkcję za pomocą find_dirs $1 > /dev/null; możemy również zadeklarować to w następujący sposób:
find_dirs(){
find "$1"-type d
}
Uwaga od man bash: „Funkcje są wykonywane w kontekście bieżącej powłoki; nie jest tworzony nowy proces ich interpretacji”. Oznacza to, że powinieneś także pamiętać o funkcjach, które mogą zmieniać środowisko wykonywania powłoki - zmieniaj zmienne i ustawienia terminala.
/usr/local/bin
zamieszane$PATH
?~/.bashrc
(ponieważ jest tosource
d), jest to, że Bash szuka funkcji przed rozpoczęciem wyszukiwania PATH.Najlepszym wyborem będzie
~/.bashrc
plik.Możesz zapisać definicje funkcji powłoki bezpośrednio w
~/.bashrc
pliku lub, jeśli masz ich wiele i nie chcesz zaśmiecać swojego~/.bashrc
pliku, możesz umieścić je wszystkie w innym wybranym pliku - po prostu upewnij się, że źródło plik w twoim~/.bashrc
pliku. Na przykład, jeśli plik z twoimi funkcjami ma nazwębash_functions
, po prostu dodaj do~/.bashrc
pliku linie:lub równoważnie:
gdzie
.
jest tylko symboliczną reprezentacjąsource
. Teif
marki testowe czy plik/path/to/bash_functions
istnieje przed próbą jej źródła.Ta technika jest bardzo podobna do ustanawiania aliasów
~/.bashrc
poprzez utworzenie pliku o nazwie~/.bash_aliases
i użycie podobnej składni do powyższej w~/.bashrc
celu przetestowania jego istnienia, a następnie źródła.źródło
~/.profile
plik jest wykonywany przez interpreter poleceń dla powłok logowania. Gdy korzystasz z GUI i otwierasz terminal, plik ten nie jest wykonywany, ponieważ będziesz w powłoce bez logowania.Oto niezbędna procedura deklarowania stałej funkcji:
Otwórz
~/.bashrc
plik w edytorze tekstu. Nie ma znaczenia, który edytor tekstu, o ile wiesz, jak go używać i dopóki go otwierasz/home/<username>/.bashrc
Na końcu
~/.bashrc
deklaruj własną funkcję, na przykład:Zapisz i zamknij plik.
~/.bashrc
Plik jest czytać przy każdym otwarciu interaktywną powłokę (która jest nowa karta terminalu, poprzez logowaniessh
lub otwarte tty1 lub inna wirtualna konsola). Nie będzie to dostępne w plikach skryptów, ponieważ~/.bashrc
nie jest odczytywane dla nieinteraktywnych powłok. Nie jest również dostępny, jeśli uruchamiaszbash
z--norc
opcją.Jeśli chcesz, aby funkcja była natychmiast dostępna na aktualnie otwartej karcie, użyj
source ~/.bashrc
polecenia.Funkcje przyjmują argumenty tak jak zwykłe polecenia. Na przykład,
$1
poprzez$9
wskazuje parametry pozycyjne podczas wywoływania funkcji. W powyższym przykładziefind_dirs
bierze tylko jeden parametr pozycyjny i będzie wywoływany jakofind_dirs /etc
. Możesz także użyć,$@
aby odwołać się do wszystkich parametrów pozycyjnych. Funkcje akceptują również przekierowanie. Możesz wywołać funkcję za pomocąfind_dirs $1 > /dev/null
; możemy również zadeklarować to w następujący sposób:Uwaga od
man bash
: „Funkcje są wykonywane w kontekście bieżącej powłoki; nie jest tworzony nowy proces ich interpretacji”. Oznacza to, że powinieneś także pamiętać o funkcjach, które mogą zmieniać środowisko wykonywania powłoki - zmieniaj zmienne i ustawienia terminala.źródło