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.

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"

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"

1

Ini harus sama:

for x in `echo $PATH | sed 's/:/ /g'`; do ls $x | grep svn; done

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.


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.


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 /.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.