Tôi nghĩ rằng xargs
là chức năng bản đồ của vỏ UNIX. Chức năng filter
là gì?Nếu xargs là bản đồ, bộ lọc là gì?
EDIT: có vẻ như tôi sẽ phải rõ ràng hơn một chút.
Giả sử tôi phải bàn giao một chương trình chấp nhận một chuỗi đơn làm tham số và trả về bằng mã thoát là 0 hoặc 1. Chương trình này sẽ hoạt động như một vị từ trên các chuỗi mà nó chấp nhận.
Ví dụ: tôi có thể quyết định diễn giải tham số chuỗi dưới dạng tệp và xác định biến vị ngữ là "tệp này tồn tại". Trong trường hợp này, chương trình có thể là test -f
, trong đó, cho một chuỗi, thoát với 0 nếu tệp tồn tại và 1 cách khác.
Tôi cũng phải truyền một chuỗi các chuỗi. Ví dụ, tôi có thể có một tập tin ~/paths
chứa
/etc/apache2/apache2.conf
/foo/bar/baz
/etc/hosts
Bây giờ, tôi muốn tạo một tập tin mới, ~/existing_paths
, chỉ chứa những đường dẫn đó tồn tại trên hệ thống tập tin của tôi. Trong trường hợp của tôi, đó sẽ là
/etc/apache2/apache2.conf
/etc/hosts
Tôi muốn làm điều này bằng cách đọc trong file ~/paths
, lọc những dòng bằng vị test -f
, và viết ra để ~/existing_paths
. Bằng cách tương tự với xargs
, điều này sẽ trông giống như:
cat ~/paths | xfilter test -f > ~/existing_paths
Đây là chương trình giả thuyết xfilter
mà tôi đang tìm kiếm:
xfilter COMMAND [ARG]...
Trong đó, đối với mỗi dòng L
đầu vào tiêu chuẩn của nó, sẽ gọi COMMAND [ARG]... L
và nếu mã thoát là 0, nó sẽ in L
, nếu không nó sẽ không in được gì.
Để được rõ ràng, tôi không tìm kiếm
- một cách để lọc một danh sách các filepaths bởi sự tồn tại. Đó là một ví dụ cụ thể.
- cách viết chương trình như vậy. Tôi có thể làm điều đó.
tôi am tìm kiếm một trong hai:
- một thực tồn tại trước đó, như
xargs
, hoặc - một lời giải thích rõ ràng về lý do tại sao điều này không tồn tại
Vì không hiệu quả ** fork ** Nt imes một lệnh chỉ filer dựa trên trạng thái thoát. Như bạn đã nói, thật đơn giản để viết bằng bất kỳ ngôn ngữ nào (bash, perl, C) - nhưng không hiệu quả. Hiệu quả hơn nhiều là sử dụng trực tiếp một số lệnh (công cụ thích hợp - dựa trên tình huống) những gì có thể đọc _STDIN_ và _filter input_ như zilion times ** fork/exec ** một lệnh cho trạng thái thoát. Nhiều lần 'xargs' không phải là cách hiệu quả nhất. (Hãy tưởng tượng một danh sách tập tin dài 1_000_000 dòng. Dĩa Milion không phải là điều tốt nhất những gì bạn có thể làm ...) Và nếu cần điều đó (như bạn đã biết) nó là một chức năng bash 3 dòng – jm666
@ jm666 nghe như " hiệu quả "bạn có nghĩa là" biểu diễn ". Tôi không quan tâm đến hiệu suất, tôi quan tâm đến sự biểu cảm. – jameshfisher