Czy istnieje polecenie systemu Linux, które wyświetla listę wszystkich dostępnych poleceń i aliasów dla tej sesji terminala?
Jakby wpisałeś „a” i nacisnąłeś tab, ale dla każdej litery alfabetu. Lub uruchamianie „aliasu”, ale także zwracanie poleceń.
Czemu? Chciałbym uruchomić następujące i sprawdzić, czy polecenie jest dostępne:
ListAllCommands | grep searchstr
Odpowiedzi:
Możesz użyć wbudowanego bash (1)
compgen
compgen -c
wyświetli listę wszystkich poleceń, które możesz uruchomić.compgen -a
wyświetli listę wszystkich aliasów, które możesz uruchomić.compgen -b
wyświetli listę wszystkich wbudowanych programów, które możesz uruchomić.compgen -k
wyświetli listę wszystkich słów kluczowych, które możesz uruchomić.compgen -A function
wyświetli listę wszystkich funkcji, które możesz uruchomić.compgen -A function -abck
wypisze wszystkie powyższe za jednym razem.Sprawdź stronę podręcznika pod kątem innych uzupełnień, które możesz wygenerować.
Aby bezpośrednio odpowiedzieć na twoje pytanie:
powinien robić, co chcesz.
źródło
compgen | grep
bardziej efektywne może być przekazanie łańcucha jako argumentu docompgen
siebie (jeśli wiadomo, że jest to przedrostek, jak sugeruje to pytanie). W tym przypadku tak by byłocompgen -ac searchstr
.whatis compgen
i „Brak ręcznego wprowadzania” dlaman compgen
.bash
wbudowane, a nie osobne polecenie z własną stroną podręcznika . Musisz przeczytaćbash(1)
stronę podręcznika lub uruchomićhelp compgen
wbash
linii poleceń.compgen -c | sort | uniq | less
wypisze wszystkie dostępne polecenia bez powielonych linii i posortowane alfabetycznie.Dodaj do .bashrc
Jeśli chcesz także mieć aliasy, to:
źródło
-L
on, aby podążać za dowiązaniami symbolicznymi do miejsca docelowego. Uwaga:-L
jest opcją, a nie częścią pasującego wyrażenia, dlatego należy ją umieścić przed ścieżką w wierszu polecenia. W tym przypadkufind -L {}
echo -n $PATH | xargs -d : -I {} find {} -maxdepth 1 -executable -type f -printf '%P\n' 2> /dev/null | sort -u
(+1 za zgodność z zsh)Jest
polecenie, które wyświetla wszystkie aliasy i polecenia w $ PATH, gdzie używana jest moja komenda . Można go użyć do sprawdzenia, czy polecenie istnieje w kilku wariantach. Poza tym ... Prawdopodobnie jest jakiś skrypt, który analizuje $ PATH i wszystkie aliasy, ale nie wiem o żadnym takim skrypcie.
źródło
Użyj „which searchstr”. Zwraca ścieżkę konfiguracji binarnej lub aliasu, jeśli jest to alias
Edycja: jeśli szukasz listy aliasów, możesz użyć:
Dodaj to do dowolnej odpowiedzi PATH, która Ci odpowiada. Zakłada, że używasz bash ..
źródło
Polecenie inne nie działało dla mnie w systemach osadzonych, ponieważ wymagają bash lub bardziej kompletnej wersji xargs (busybox był ograniczony).
Poniższe polecenia powinny działać na każdym systemie uniksopodobnym.
Lista według folderu:
Wyświetl wszystkie polecenia według nazwy
źródło
tr
. Dlaczego nie po prostuls $(echo ${PATH//:/ })
?Wypróbuj ten skrypt:
źródło
Dla użytkowników komputerów Mac ( find nie ma -executable, a xargs nie ma -d):
źródło
Przydatne jest wypisanie poleceń na podstawie słów kluczowych powiązanych z poleceniem.
Posługiwać się:
man -k "your keyword"
możesz połączyć z:
| grep "another word"
na przykład, aby znaleźć edytor tekstu:
man -k editor | grep text
źródło
Spróbuj nacisnąć ALT-? (alt i znak zapytania w tym samym czasie). Daj mu sekundę lub dwie, aby zbudować listę. Powinno działać w trybie bash.
źródło
Oto rozwiązanie, które daje listę wszystkich plików wykonywalnych i aliasów. Jest także przenośny dla systemów bez
xargs -d
(np. Mac OS X) i poprawnie obsługuje ścieżki ze spacjami w nich.Użycie:
myscript.sh [grep-options] pattern
np. Aby znaleźć wszystkie polecenia zaczynające się odls
, bez rozróżniania wielkości liter, wykonaj:źródło
metoda skrótu, aby wyświetlić listę wszystkich poleceń. Otwórz terminal i naciśnij dwa razy przycisk „tab” . To pokazuje wszystkie polecenia w terminalu
źródło
grep
dokładnie w jaki sposób?Możesz też uzyskać wygodną listę poleceń połączoną z szybkimi opisami (o ile polecenie ma stronę podręcznika, co większość robi):
Potem po prostu grepuj, jak chcesz.
daje:
Wyniki nie wydają się być posortowane, więc jeśli szukasz długiej listy, możesz rzucić | sortuj | do środka, a następnie potokuj to do pagera, np. mniej / więcej / najbardziej. ala:
Która zwraca posortowaną listę wszystkich poleceń, które mają „zip” w nazwie lub ich krótki opis, i pompuje to, że „mniej” pager. (Możesz także zamienić „mniej” na $ PAGER i użyć domyślnego pagera.)
źródło
Zawsze możesz wykonać następujące czynności:
Powłoka wykona polecenie tylko, jeśli i tak jest wymieniona w ścieżce env var.
źródło
to zależy, to znaczy zależy od tego, jakiej powłoki używasz. oto ograniczenia, które widzę:
Korzystam z ZSH, więc oto odpowiedź zsh, robi 3 następujące rzeczy:
tutaj jest:
Jeśli używasz zsh, powinno to zrobić.
źródło
Problem polega na tym, że uzupełnianie tabulatorów szuka twojej ścieżki, ale wszystkie polecenia nie są na twojej ścieżce.
Aby znaleźć polecenia na ścieżce za pomocą bash, możesz zrobić coś takiego:
dla x in
echo $PATH | cut -d":" -f1
; czy ls $ x; Gotoweźródło
Oto funkcja, którą możesz umieścić w swoim pliku bashrc:
Przykładowe użycie:
FYI: IFS jest zmienną używaną przez bash do dzielenia łańcuchów.
Z pewnością mogą istnieć lepsze sposoby na to.
źródło
może się mylę, ale co, jeśli naciśniesz klawisz Escape, dopóki nie pojawi się opcja Wyświetl wszystkie X?
źródło
źródło
compgen -c > /tmp/list.txt && /tmp/wc list.txt
Dlaczego po prostu nie wpiszesz:
W terminalu.
Powłoka powie coś w stylu:
EDYTOWAĆ:
Ok, biorę głos negatywny, ponieważ odpowiedź jest głupia, chcę tylko wiedzieć: co jest nie tak z tą odpowiedzią !!! Pytający powiedział:
Wpisanie polecenia powie ci, czy jest dostępne!
Prawdopodobnie miał na myśli „bez wykonywania polecenia” lub „dołączyć go do skryptu”, ale nie mogę czytać w jego myślach (nie chodzi o to, że nie mogę regularnie, to po prostu dlatego, że ma deflektor czytający w myślach )
źródło
formathdd
polecenie istnieje. Och, czekaj, po prostu go uruchomię i zobaczę. Ojej. Dzięki :)w debian: ls / bin / | grep „whatImSearchingFor”
źródło