Bagaimana saya bisa memahami kemungkinan penyelesaian tab?

18

Ketika saya menekan tab di konsol saya mendapatkan output ini

Tampilkan semua 2957 kemungkinan? (y atau n)

Apakah ada cara untuk digunakan greppada 2957 kemungkinan ini? Saya ingin mencari semua perintah dengan kata "svn" di dalamnya.

UAdapter
sumber

Jawaban:

21

Solusinya adalah bash builtin compgen. Untuk mengambil 'svn' dari semua perintah yang tersedia dan perintah alias yang dapat diakses $PATH, ketik.

compgen -ac | grep svn

Ingin mencari dari awalan tertentu (mis. Semua perintah yang dimulai dengan ecrypt)? Gunakan ekspresi reguler. .

compgen -ac | grep "^ecrypt"
Jjed
sumber
jawaban yang sangat baik, tetapi bagaimana jika seseorang ingin mengambil kemungkinan penyelesaian tab sendiri? Maksudku, itu tidak selalu dipicu oleh nama perintah, tetapi juga oleh parameter perintah, dll.
UncleZeiv
2

Anda dapat mencoba menggunakan compgen.

Sebagai contoh:

compgen -ac | grep "svn"
Rajesh Pantula
sumber
1

Ini harus sama:

for x in `echo $PATH | sed 's/:/ /g'`; do ls $x | grep svn; done
totaam
sumber
1
for i in $(echo $PATH | tr ":" "\n"); do find $i -type f -perm +111; done | grep svn

Sangat mirip dengan jawaban totaam selain dari ini membatasi ruang lingkupnya ke executable (seperti yang dilakukan Bash). Tapi JJE compgenlebih baik satu mil lagi.

Oli
sumber
1

mungkin {,.}*svn*membantu di sini, mis ls -l /usr/bin/{,.}*svn*<tab>.

Tapi, lihat Zsh! Di sini: http://www.jukie.net/bart/blog/zsh-tab-completion adalah beberapa contoh yang bagus bagaimana ini dapat membantu mengurangi hasil penyelesaian tab Anda. Ini juga termasuk negasi, misalnya jika Anda ingin semua hasil penyelesaian-tab tanpa kata "foobar", atau semua hasil dengan angka genap di tempat pertama, penyelesaian-subdirektori tab dan banyak lagi. Alasan mengapa saya berubah menjadi zsh adalah berbagi riwayat antara semua terminal terbuka.

matematika
sumber
0

Saya tidak tahu compgen, dan akan menyarankan:

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

untuk bash.

${VAR//pattern/replace} replaces in VAR pattern with replace. // is used to replace every pattern, not just the first, which would be just /.
Pengguna tidak diketahui
sumber