2011-09-26 25 views
7

Tôi đã có nhiều tập lệnh shell sử dụng một số lệnh và các công cụ khác.Cách lấy tất cả các công cụ được sử dụng trong kịch bản lệnh shell

Vì vậy, có cách nào tôi có thể liệt kê tất cả các chương trình mà tập lệnh shell đang sử dụng không? Loại cách để truy xuất các phụ thuộc từ mã nguồn.

+0

Câu hỏi của bạn không rõ ràng, ví dụ "phân tích cú pháp công cụ" không có ý nghĩa. Bạn đang tìm kiếm danh sách các chương trình mà tập lệnh của bạn đã sử dụng phải không? Hoặc danh sách các chương trình sử dụng tập lệnh của bạn? –

+0

Câu hỏi được cập nhật. Tôi đang tìm danh sách các chương trình sử dụng kịch bản lệnh shell. – deimus

Trả lời

2

Sử dụng sed để dịch đường ống và $( thành dòng mới, sau đó sử dụng awk để xuất từ ​​đầu tiên của dòng nếu đó có thể là lệnh. Các đường ống thành which để tìm các từ lệnh tiềm ẩn trong PATH:

2

Một cách bạn có thể thực hiện là vào thời gian chạy. Bạn có thể chạy tập lệnh bash trong debug mode với tùy chọn -x và sau đó phân tích cú pháp đầu ra của nó. Tất cả các lệnh được thực thi cộng với các đối số của chúng sẽ được in ra đầu ra tiêu chuẩn.

+0

bash --rpm-yêu cầu thực hiện điều này theo cách dễ đọc hơn của con người ... bạn không biết tùy chọn để làm điều này mà không cần chạy script? – deimus

+0

Tôi không nghĩ rằng bạn có thể làm điều đó một cách đáng tin cậy mà không cần chạy tập lệnh. [Ở đây] (http://stackoverflow.com/questions/3926918/determine-function-and-file-dependency-of-a-shell-script/3928062#3928062) công cụ duy nhất tôi thấy rằng có thể có thể làm điều đó. – ks1322

1

Trong khi tôi không có giải pháp chung, bạn có thể thử hai cách tiếp cận:

  1. Bạn có thể sử dụng strace để xem những chương trình được thực hiện bởi kịch bản của bạn.
  2. Bạn có thể chạy chương trình của mình trong môi trường trình xây dựng và xem các gói nào bị thiếu.
0

Do tính chất động của vỏ, bạn không thể thực hiện việc này mà không cần chạy tập lệnh.

Ví dụ:

TASK="cc foo.c" 
time $TASK 

này sẽ thực sự khó khăn để xác định mà không cần chạy mà cc được gọi là thậm chí trong ví dụ tầm thường như trên.

Trong thời gian chạy, bạn có thể kiểm tra đầu ra gỡ lỗi sh -x myscript như được chỉ ra bởi thiton (+1) và ks1322 (+1). Bạn cũng có thể sử dụng công cụ như strace để nắm bắt tất cả các tòa nhà chọc trời exec().

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