Jak mogę przejrzeć opcje uzupełniania kart?

18

Kiedy naciskam klawisz Tab w konsoli, otrzymuję to wyjście

Pokaż wszystkie 2957 możliwości? (t lub n)

Czy jest jakiś sposób na wykorzystanie greptych 2957 możliwości? Chciałbym wyszukać wszystkie polecenia ze słowem „svn” w nich.

UAdapter
źródło

Odpowiedzi:

21

Rozwiązaniem jest wbudowane bash compgen. Aby grep 'svn' ze wszystkich dostępnych poleceń i aliasów poleceń dostępnych przez $PATH, wpisz.

compgen -ac | grep svn

Chcesz wyszukiwać według określonego prefiksu (np. Wszystkich poleceń zaczynających się od ecrypt)? Używaj wyrażeń regularnych. .

compgen -ac | grep "^ecrypt"
Jjed
źródło
doskonała odpowiedź, ale co zrobić, jeśli sami chcemy grep możliwości uzupełnienia tabulacji? To znaczy, nie zawsze jest wywoływana przez nazwę polecenia, ale także przez parametry polecenia itp.
UncleZeiv,
2

Możesz spróbować użyć compgen.

Na przykład:

compgen -ac | grep "svn"
Rajesh Pantula
źródło
1

Powinno to być równoważne:

for x in `echo $PATH | sed 's/:/ /g'`; do ls $x | grep svn; done
Totaam
źródło
1
for i in $(echo $PATH | tr ":" "\n"); do find $i -type f -perm +111; done | grep svn

Bardzo podobny do odpowiedzi totaam poza tym ogranicza jego zakres do plików wykonywalnych (podobnie jak Bash). Ale JJE's compgenjest o milę lepszy.

Oli
źródło
1

może {,.}*svn*pomaga tutaj np ls -l /usr/bin/{,.}*svn*<tab>.

Ale spójrz na Zsh! Tutaj: http://www.jukie.net/bart/blog/zsh-tab-completion to kilka świetnych przykładów, w jaki sposób może pomóc zmniejszyć wyniki uzupełniania kart. Obejmuje to również negację, np. Jeśli chcesz uzyskać wszystkie wyniki uzupełniania tabulatorów bez słowa „foobar” lub wszystkie wyniki z parzystymi cyframi na pierwszym miejscu, uzupełnianie tabulatorów w podkatalogu i wiele więcej. Powodem, dla którego przeszedłem na zsh, było dzielenie się historią między wszystkimi otwartymi terminalami.

matematyka
źródło
0

Nie znałem compgen i zasugerowałbym:

ls -d ${PATH//:/\/*svn* } 2>/dev/null

za bash.

${VAR//pattern/replace} replaces in VAR pattern with replace. // is used to replace every pattern, not just the first, which would be just /.
nieznany użytkownik
źródło