Đầu tiên, cat
ghi vào đầu ra tiêu chuẩn, không nhất thiết phải là một thiết bị đầu cuối, ngay cả khi cat
được gõ như một phần của lệnh vào một vỏ tương tác. Nếu bạn thực sự cần một cái gì đó để ghi vào thiết bị đầu cuối ngay cả khi đầu ra tiêu chuẩn được chuyển hướng, điều đó không dễ dàng (bạn cần chỉ định thiết bị đầu cuối nào, và thậm chí có thể không có một nếu lệnh được thực thi từ tập lệnh), mặc dù một lệnh (ab) có thể sử dụng đầu ra lỗi tiêu chuẩn nếu lệnh chỉ là một phần của đường ống. Nhưng vì bạn đã chỉ ra rằng cat
thực sự làm công việc đó, tôi cho rằng bạn không hỏi về tình huống như vậy.
Nếu mục đích của bạn là gửi những gì được ghi vào đầu ra tiêu chuẩn vào một đường ống, thì việc sử dụng cat
sẽ đủ điều kiện nhận Giải thưởng Sử dụng Mèo vô dụng , vì cat file | pipeline
(trong đó pipeline
viết tắt của bất kỳ đường ống nào) có thể được thực hiện hiệu quả hơn <file pipeline
. Nhưng một lần nữa, từ cách diễn đạt của bạn, tôi suy luận rằng đây không phải là ý định của bạn.
Vì vậy, nó không phải là quá rõ ràng những gì bạn đang lo lắng. Nếu bạn thấy cat
quá dài để nhập, bạn có thể xác định bí danh một hoặc hai ký tự (vẫn còn một vài tên như vậy vẫn chưa được sử dụng trong Unix tiêu chuẩn). Tuy nhiên, nếu bạn lo lắng rằng việc cat
chi tiêu chu kỳ vô ích, bạn không nên.
Nếu có một chương trình null
không có đối số và chỉ sao chép đầu vào tiêu chuẩn thành đầu ra tiêu chuẩn (đối tượng trung tính cho đường ống), bạn có thể làm những gì bạn muốn với <file null
. Không có chương trình nào như vậy, mặc dù nó sẽ dễ viết (chương trình C chỉ với main
chức năng một dòng có thể thực hiện công việc), nhưng gọi cat
mà không có đối số (hoặc cat -
nếu bạn muốn rõ ràng) sẽ làm điều đó.
Nếu có một nocat
chương trình lấy chính xác một đối số tên tệp, cố gắng mở tệp, khiếu nại nếu không thể, và nếu không thì tiến hành sao chép từ tệp sang đầu ra tiêu chuẩn, thì đó sẽ chỉ là những gì bạn đang yêu cầu. Nó chỉ khó viết hơn một chút so với null
, công việc chính là mở tệp, kiểm tra và có thể phàn nàn (nếu bạn tỉ mỉ, bạn cũng có thể muốn bao gồm một bài kiểm tra có một đối số và khiếu nại khác). Nhưng một lần nữa cat
, bây giờ được cung cấp với một đối số duy nhất, thực hiện điều đó, do đó không cần bất kỳ nocat
chương trình nào .
Một khi bạn đã thành công trong việc viết nocat
chương trình, tại sao chỉ dừng lại ở một đối số? Việc gói mã vào một vòng lặp for(;*argp!=NULL;++argp)
thực sự không có chút nỗ lực nào, thêm nhiều nhất một vài hướng dẫn máy vào nhị phân và tránh phải phàn nàn về một số lượng đối số sai (bỏ qua nhiều hướng dẫn khác). Voilà một phiên bản nguyên thủy của cat
các tập tin nối. (Thành thật mà nói, bạn cần phải tinh chỉnh nó một chút để không có đối số, nó hoạt động như null
.)
Tất nhiên trong cat
chương trình thực tế , họ đã thêm một vài tiếng chuông và còi, bởi vì họ luôn luôn làm như vậy. Nhưng điều cốt lõi là khía cạnh "kết hợp" của cat
chi phí thực sự không có nỗ lực nào cả, cho cả lập trình viên cũng như cho máy thực hiện nó. Thực tế là cat
bao gồm null
và nocat
giải thích sự không tồn tại của các chương trình như vậy. Tránh sử dụng cat
với một đối số duy nhất nếu kết quả đi vào một đường ống, nhưng nếu nó chỉ được sử dụng để hiển thị nội dung tệp trên thiết bị đầu cuối, ngay cả trang tôi liên kết để thừa nhận rằng đây là cách sử dụng hữu ích cat
, vì vậy đừng ngần ngại.
Bạn có thể kiểm tra cat
thực sự được thực hiện bằng một vòng lặp đơn giản xung quanh nocat
chức năng giả định, bằng cách gọi cat
với một số tên tệp trong đó một tên không hợp lệ, không ở vị trí đầu tiên: thay vì phàn nàn ngay lập tức rằng tệp này không tồn tại, cat
trước tiên hãy bỏ qua các tệp hợp lệ và sau đó phàn nàn về tệp không hợp lệ (ít nhất đó là cách con mèo của tôi cư xử).