Co mogę wpisać w mojej powłoce (która tak się składa bash
), która wyświetli wszystkie rozpoznane polecenia?
Czy to też różni się powłoką? Czy też wszystkie powłoki mają po prostu „katalog” rozpoznawanych poleceń?
Po drugie, inne pytanie, ale jak mogę je pominąć? Innymi słowy, jak mogę napisać własne view
polecenie, aby zastąpić polecenie istniejące w moim systemie Ubuntu, które wydaje się po prostu ładować vim
.
Odpowiedzi:
Możesz użyć
compgen
FYI:
źródło
compgen -c
będzie to takie rzeczy{
lubwhile
które nie są ściśle mówiąc poleceń.Powłoka zna cztery rodzaje poleceń.
~/.bashrc
dla bash).cd
zmienia bieżący katalog,set
zmienia opcje i parametry pozycyjne,export
zmienia środowisko,…). Większość powłok oferuje w dużej mierze te same wbudowane elementy, ale każda powłoka ma kilka rozszerzeń zestawu podstawowego.PATH
Zmienna zawiera oddzieloną dwukropkami listę katalogów do wyszukiwania programów.W przypadku poleceń kilku typów o tej samej nazwie, wykonywane jest pierwsze dopasowanie w powyższej kolejności¹.
Możesz zobaczyć, jaki typ polecenia odpowiada nazwie, uruchamiając
type some_name
.Możesz wyświetlić listę aliasów, uruchamiając
alias
wbudowany bez argumentów. Nie ma sposobu, aby wyświetlić listę funkcji lub wbudowanych funkcji, które działają we wszystkich powłokach. Możesz znaleźć listę wbudowanych w dokumentacji powłoki.W bash
set
wbudowane listy funkcji z ich definicjami, a także zmiennymi. W bash, ksh lub zshtypeset -f
wyświetla funkcje z ich definicjami. W bash możesz wyświetlić listę wszystkich nazw poleceń dowolnego typucompgen -c
. Możesz użyćcompgen -A alias
,compgen -A builtin
compgen -A function
aby wyświetlić listę poleceń określonego typu. Możesz przekazać dodatkowy ciąg znaków, abycompgen
wyświetlić tylko polecenia rozpoczynające się od tego prefiksu.W zsh, można wymienić aktualnie dostępne polecenia danego typu z
echo ${(k)aliases}
,echo ${(k)functions}
,echo ${(k)builtins}
iecho ${(k)commands}
(ten ostatni wymienia tylko poleceń zewnętrznych).Poniższy fragment kodu niezależny od powłoki zawiera listę wszystkich dostępnych programów zewnętrznych:
W poleceniach Bash: hashed występuje wielkość liter.
Bash Reference Manual mówi:
Próbować:
PATH
Zmienna nie zawiera~/dir-for-wat-command
,compgen -c
nie pokazujewat
, ale można uruchomićwat
.Jeśli chcesz ukryć istniejące polecenie, zdefiniuj alias lub funkcję .
¹ Wyjątek: kilka wbudowanych funkcji (zwanych wbudowanymi specjalnymi ) nie może być przesłanianych przez funkcję - jednak bash i zsh nie są zgodne z POSIX w tym punkcie w trybie domyślnym.
źródło
$PATH
podobna/bin:/usr/bin:
(końcowa:
), w której nie można wyświetlić plików wykonywalnych w bieżącym katalogu.Lista poleceń składa się z dwóch zestawów:
PATH
Nie możesz zmieniać wbudowanych, ale możesz powstrzymać powłokę przed użyciem wbudowanych, określając pełną nazwę ścieżki jak
/bin/echo
.Jeśli chodzi o polecenia w twoim
PATH
, możesz to zmienić.PATH
to rozdzielona dwukropkami lista katalogów, w których można szukać poleceń. Pierwszy znaleziony plik „wygrywa”.(Ta składnia nie działa w przypadku
csh
powłok pochodzących od, ale dla wszystkich innych, o których wiem).Że eksport
PATH
z~/bin
jako pierwszy wpis, a następnie przez resztę istniejącychPATH
wpisów. Więc teraz twoja powłoka sprawdzidirectory called
binin your home directory for a command *first* before checking the standard
PATH` skonfigurowanego systemu. Możesz łatwo sprawić, by sprawdził ostatnio nowy katalog, zamiast tego używając:Aby zachować
PATH
dla przyszłych logowań, dodaj go do.profile
lub innego pliku rc powłoki.źródło
Spróbuj tego, używając bash :
źródło
Jeśli naciśniesz klawisz tab dwa razy, a następnie y, otrzymasz listę wszystkich dostępnych poleceń w bieżącej powłoce. W przypadku drugiego pytania myślę, że powinieneś użyć aliasu: alias powłoki .
źródło