Jeśli ustawisz lub wyeksportujesz zmienną środowiskową w bash, możesz ją rozbroić . Jeśli ustawisz alias w bash, możesz go odblokować . Ale wydaje się, że nie ma zakłóceń .
Rozważmy tę (trywialną) funkcję bash, na przykład ustawioną w pliku .bash_aliases i czytającą przy inicjalizacji powłoki.
function foo () { echo "bar" ; }
Jak mogę usunąć tę definicję funkcji z mojej bieżącej powłoki?
(Zmiana plików inicjujących lub ponowne uruchomienie powłoki nie ma znaczenia.)
linux
command-line
bash
shell
quack quixote
źródło
źródło
unfunction
byłoby ładną nazwą polecenia :-)Odpowiedzi:
Rozbrojony wbudowane polecenie wykonuje opcję
-f
, do funkcji Delete:Utwórz nieustawiony wpis na stronie podręcznika bash :
Uwaga:
-f
jest to naprawdę konieczne tylko wtedy, gdy istnieje zmienna o tej samej nazwie. Jeśli nie masz również zmiennej o nazwiefoo
,unset foo
usunie funkcję.źródło
-f
parametr w eksporcie, ale nie znalazłem go w stanie nieustawionym . dzięki.unset
nie jest poleceniem zewnętrznym, jest częścią powłoki ( w tym przypadku bash ); spróbujman bash
znaleźć wpis dlaunset
(zarządzanie jest dość duże,unset
znajduje się wShell Builtin Commands
sekcji).Zobacz
help unset
:Nie ma
unset --help
animan unset
niestety.źródło
man unset
ponieważ jest to wbudowane polecenie, a zamiast tego wbudowane poleceniahelp
. Dla niektórych wbudowanych poleceń istnieje również zewnętrzny plik wykonywalny. W razie wątpliwości spróbuj nptype mycommnad
. Na przykładtype unset
i odpowie ciunset is a shell builtin
. Jeśli chcesz wiedzieć, czy istnieje plik wykonywalny, spróbujwhich echo
(inny buikt-in) i powie, gdzie on jest. Jest--option_long
to typowe dla polecenia wykonywalnego. Spróbujecho --help
i/bin/echo --help
.:-)
.help
zamiastman
. (Niezupełnie prawda, ponieważ można je znaleźć wman bash
rozdziale KOMENDY WBUDOWANE SHELLTIN lub bezpośrednio wman BASH-BUILTINS
...). Jest to wygodne, że pod powłoką bash możesz po prostu poprosić,help
a otrzymasz listę wbudowanych poleceń:-)
. (Spróbujhelp help
iman man
zbyt).Niedawno chciałem całkowicie go odinstalować
nvm
i ponownie zainstalować, a także pozbyć się dowolnego środowiska. Okazuje się, że pozbycie się go nie wydaje się, ponieważ duża częśćnvm
jest częściowo zaimplementowana jako mnóstwo funkcji powłoki, które są pozyskiwane do twojej powłoki za pośrednictwem.bash_profile
lub.bashrc
, lub gdziekolwiek dodałeś polecenia pozyskiwania, o których mówiłeś, kiedy ją instalowałeś.Zaskoczony na początku
which nvm
nie zwracając jeszcze wyraźnegonvm
polecenia i innych wciąż znajdowano, w końcu odkryłem,declare -F
że to mnóstwo funkcji powłoki. Nie chciałem po prostu zabijać powłoki i uruchamiać nowej (z powodów nieistotnych tutaj), więc wyczyściłemnvm
funkcje z tej powłoki za pomocą tego:Niektóre warianty tego mogą być pomocne dla kogoś, kto z jakiegoś powodu chce zrobić coś podobnego i nie może zrestartować nowej powłoki lub nie chce.
źródło