2012-03-31 29 views
7

Trong một vỏ Linux điển hình (bash), bạn có thể nhấn tab hai lần để nhận danh sách tất cả các lệnh shell hiện có.Làm cách nào để có danh sách tất cả các lệnh shell hiện có

Có lệnh nào có cùng hành vi không? Tôi muốn ống nó vào grep và tìm kiếm nó.

+1

Những câu trả lời dưới đây cho bạn biết cách. Tôi nghĩ bạn sẽ được hưởng lợi nhiều hơn nếu bạn cho chúng tôi biết lý do. –

+2

có thể trùng lặp của [lệnh Linux để liệt kê tất cả các lệnh và bí danh có sẵn] (http://stackoverflow.com/questions/948008/linux-command-to-list-all-available-commands-and-aliases) – camh

Trả lời

0

"tab" hai lần & "y" in tất cả các tệp trong đường dẫn của $ PATH. Vì vậy, chỉ cần in tất cả các tệp trong PATH là đủ.

Chỉ cần gõ này trong vỏ:

# printf "%s\n" ${PATH//:/\/* } > my_commands 

này chuyển hướng tất cả các lệnh vào một tập tin "my_commands".

0

Có thể có những thứ trên đường dẫn của bạn không thực sự thực thi được.

#!/bin/sh 
for d in ${PATH//:/ }; do 
    for f in "$d"/*; do 
    test -x "$f" && echo -n "$f " 
    done 
done 
echo "" 

Điều này cũng sẽ in đường dẫn, tất nhiên. Nếu bạn chỉ muốn các tên tập tin không đủ tiêu chuẩn, nó sẽ dễ dàng để thích ứng với điều này.

Hài hước, StackOverflow không biết cách xử lý đánh dấu cú pháp cho việc này. :-)

2

Bạn có thể liệt kê các thư mục ngay từ $PATH nếu bạn tinh chỉnh dấu phân tách trường trước tiên. Các dấu ngoặc hạn chế ảnh hưởng đến một lệnh, vì vậy sử dụng: (...) | grep ...

(IFS=': '; ls -1 $PATH) 
0

tabtaby

+0

Để thiết lập của tôi , Tôi chỉ cần nhấn tab một lần –

0

Tương tự như @ghoti, nhưng sử dụng find:

#!/bin/sh 
for d in ${PATH//:/ }; do 
    find $d -maxdepth 1 -type f -executable 
done 
0

Bash sử dụng một lệnh nội trang có tên 'hoàn thành' để thực hiện tính năng tab.

tôi không có các chi tiết để tay, nhưng sẽ cho bạn biết tất cả các bạn cần biết:

help complete 
0
(IFS=':'; find $PATH -maxdepth 1 -type f -executable -exec basename {} \; | sort | uniq) 

Nó không bao gồm builtins vỏ mặc dù.

0

Một câu trả lời đã bị xóa, tôi thích nó nhất, vì vậy tôi đang cố gắng để repost nó:

compgen là tất nhiên tốt hơn

echo $PATH | tr ':' '\n' | xargs -n 1 ls -1 

Tôi thấy điều này là nhất điều điển hình của vỏ, tôi nghĩ rằng nó cũng hoạt động với các vỏ khác (mà tôi nghi ngờ với những thứ như IFS=':')

Rõ ràng, có thể có vấn đề, nếu tập tin không phải là một ví dụ ecutable, nhưng tôi nghĩ cho câu hỏi của tôi, đó là đủ - Tôi chỉ muốn grep đầu ra của tôi - có nghĩa là tìm kiếm một số lệnh.

1

Liệt kê tất cả các tệp trong PATH variable của bạn (ls tất cả các thư mục trong PATH).Các lệnh hệ thống và người dùng mặc định sẽ nằm trong/bin và/sbin tương ứng nhưng khi cài đặt một số phần mềm, chúng ta sẽ thêm chúng vào một số thư mục và liên kết nó bằng biến PATH.

Các vấn đề liên quan