Làm cách nào để liệt kê danh sách các lệnh được hiển thị bởi tab của Google hoàn thành?


12

Khi sử dụng các lệnh trong bash, tôi thích tùy chọn tab đôi để hiển thị các lệnh có sẵn. Một số lệnh có nhiều kết quả khớp hơn các lệnh khác:

Ảnh chụp màn hình hoàn thành tab http://img13.imageshack.us/img13/5541/picturemhy.jpg

Có cách nào để tôi có thể chuyển đầu ra của tab đôi sang một nơi nào đó grepkhông? Tôi đã tìm thấy một bài viết liên quan , nhưng tôi vẫn không chắc chắn làm thế nào để thực hiện nó để chuyển nó sang grep.


Làm thế nào chính xác bạn tưởng tượng bạn sẽ vào grepregex? (y or n or g[rep])? Tôi ghét nghe có vẻ bi quan, nhưng tôi nghi ngờ điều này có thể được thực hiện mà không cần thêm nó vào mã bash.
Kevin

Câu trả lời:


21

Đối với các lệnh sử dụng compgen -c:

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

Đầu ra này bạn có thể chỉ cần thông qua grep.


+1 Đối với lệnh ... Phần thú vị tiếp theo có thể là cách tạo lối tắt bàn phím cho việc này.
rozcietrzewiacz

3

Dựa trên câu trả lời của @ salutis, tôi đã tạo một tập lệnh mà tôi đã gọi compvà lưu trữ trong ~/bin/compcác tìm kiếm đó commands', aliasesbuiltins, (cờ tùy chọn -cabxem mục bash man ), với tham số thứ hai tùy chọn, nếu có, sẽ dẫn đầu ra grepvà tìm kiếm tham số thứ hai.

Usage: comp string [keyword-for-grep]

Mã số:

#!/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

Cá nhân tôi cũng sẽ quan tâm đến việc tìm ra cách loại bỏ lệnh cuối cùng khỏi lịch sử shell trong tập lệnh (một cái gì đó liên quan đến history -d) để khi tìm kiếm bashlịch sử tôi sẽ không tìm thấy compmục nào. Tôi biết tôi cũng có thể làm điều này với HISTIGNOREnhưng linux khá mạnh nên cũng phải có cách thực hiện từ tệp script - đúng không?


1
Tất nhiên bạn có thể điều chỉnh điều này cho phù hợp với nhu cầu của bạn, nhưng nó sẽ giúp bạn bắt đầu.
đánh dấu

-3

Tại sao không tìm thấy những gì bạn đang tìm kiếm?

Thí dụ:

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

Biết trường hợp sử dụng của bạn, tôi có thể tạo một ví dụ lệnh chi tiết hơn.


2
Nói cách khác, bạn có thể thực hiện lại bất cứ điều gì hoàn thành của bash. Chắc chắn, nhưng điều đó không thực tế, và đó không phải là câu hỏi.
Gilles 'SO- ngừng trở nên xấu xa'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.