Bagaimana cara mem-pipe daftar perintah yang ditampilkan oleh "tab complete"?

12

Saat menggunakan perintah dalam bash, saya suka opsi tab ganda untuk menampilkan perintah yang tersedia. Beberapa perintah memiliki kemungkinan lebih banyak kecocokan daripada yang lain:

Cuplikan layar penyelesaian tab http://img13.imageshack.us/img13/5541/picturemhy.jpg

Apakah ada cara saya bisa menyalurkan output dari tab ganda ke suatu tempat, seperti grep? Saya menemukan pos terkait , tetapi saya masih tidak yakin bagaimana menerapkannya untuk mengirimnya ke grep.

cwd
sumber
Bagaimana tepatnya Anda membayangkan Anda akan masuk grepregex? (y or n or g[rep])? Saya benci terdengar pesimistis, tapi saya ragu ini bisa dilakukan tanpa menambahkannya ke kode bash.
Kevin

Jawaban:

21

Untuk perintah, gunakan compgen -c:

$ compgen -c bas
basename
base64
bashbug
bash
basename
base64
bashbug

Output ini Anda cukup pipa grep.

salut
sumber
+1 Untuk perintah ... Bagian yang menarik berikutnya adalah cara membuat pintasan keyboard untuk ini.
rozcietrzewiacz
3

Berdasarkan jawaban @ salutis, saya membuat skrip yang saya panggil compdan simpan dalam ~/bin/comppencarian itu commands',, aliasesdan builtins, (flag opsi -cablihat entri bash man ), dengan parameter opsional kedua yang, jika ada, menyalurkan output ke grepdan mencari parameter kedua.

Usage: comp string [keyword-for-grep]

Kode:

#!/bin/bash

if [ -z "$1" ]; then
    echo usage: comp string [keyword-for-grep]
    echo 
    exit
fi

if [ -z "$2" ]; then
    compgen -cab -- $1
    exit
fi

compgen -cab -- $1 | grep -i $2

Secara pribadi saya juga akan tertarik untuk mencari cara untuk menghapus perintah terakhir dari sejarah shell di skrip (sesuatu yang berkaitan dengan history -d) sehingga ketika mencari bashsejarah saya tidak akan menemukan compentri. Saya tahu saya juga bisa melakukan ini dengan HISTIGNOREtetapi linux cukup kuat sehingga harus ada cara untuk melakukannya dari file skrip juga - kan?

menandai
sumber
1
Tentu saja Anda dapat menyesuaikan ini sesuai dengan kebutuhan Anda, tetapi itu harus Anda mulai.
tandai
-3

Mengapa tidak menemukan yang Anda cari?

Contoh:

find / -name ec2* -executable -type f -perm -og+rx -print

Mengetahui kasus penggunaan Anda, saya dapat membuat contoh perintah yang lebih rinci.

Mat
sumber
2
Dengan kata lain, Anda dapat menerapkan kembali penyelesaian bash apa pun. Tentu, tapi itu tidak praktis, dan bukan itu pertanyaannya.
Gilles 'SANGAT berhenti menjadi jahat'