Odśwież aliasy i funkcje po zdefiniowaniu nowych aliasów i funkcji?

55

Kiedy definiuję nowy alias w .bash_aliasespliku lub nową funkcję w .bashrcpliku, czy jest jakieś polecenie odświeżające, aby móc natychmiast użyć nowych aliasów lub funkcji bez zamykania terminala (w moim przypadku xfce4-terminal z kilkoma otwartymi kartami, wiele plików otwartych i w środku pracy)?

xralf
źródło
6
Zauważ, że nie ma polecenia, które ujawniłoby to nowe polecenie we wszystkich twoich otwartych terminalach / kartach. Będziesz musiał wykonać . .bashrclub source .bashrcw każdej otwartej powłoce.
Paul Tomblin,

Odpowiedzi:

66

Pozyskanie zmienionego pliku zapewni dostęp do nowo zapisanego aliasu lub funkcji w bieżącym terminalu, na przykład:

source ~/.bashrc

Alternatywna składnia:

. ~/.bashrc

Zauważ, że jeśli masz wiele instancji bash działających w twoim terminalu (wspomniałeś wiele kart), będziesz musiał uruchomić to za każdym razem.

jasonwryan
źródło
3
sourcepochodzi od csh. Sposób Bourne Shell jest . .bashrc.
Paul Tomblin,
To interesujące, że to nie działa, gdy definiuję alias prg='prg.py'. Muszę zamknąć terminal.
xralf,
„będziesz musiał uruchomić to w każdym przypadku”. - Należy pamiętać, że użytkownicy zsh mogą odpowiednio ustawić TMOUT i TRAPALRM na stat i (jeśli to konieczne) ponownie ~ ~ .zshrc raz na sekundę lub w dowolnym innym rozsądnym odstępie czasu. Nie wierzę jednak, że bash może to zrobić.
Kevin,
6

. ~/.bashrcUruchomi się pisanie w wierszu poleceń, .bashrca więc zostaną utworzone wszystkie funkcje zdefiniowane w tym pliku.

.bashrcwtedy sam również wywoła i uruchomi .bash_aliases( jeśli istnieje), jeśli .bashrcma w nim ten kod:

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

podczas gdy używanie . ~/.bash_aliasessamego (na przykład z wiersza poleceń) po prostu spróbuje uruchomić .bash_aliasesbez udziału .bashrc i da błąd, jeśli plik nie istnieje (stąd test sprawdzania pliku, gdy jest w środku .bashrc).

Michael Durrant
źródło
2

Czasami będziesz chciał przekształcić alias w funkcję, ale gdy źródłowy plik bashrc, może wystąpić dziwny błąd:

. ~/.bashrc
bash: /home/username/.bashrc: line 38: syntax error near unexpected token `('
bash: /home/username/.bashrc: line 38: `hello_world() {'

Może się tak zdarzyć, ponieważ nazwa aliasu koliduje z nazwą nowo zdefiniowanej funkcji. O ile wiem, aby tego uniknąć, trzeba wszystko zdekasować, a następnie pobrać plik bashrc:

bash-4.3 $
unalias -a && . $HOME/.bashrc
Samuel
źródło