Tại sao cp không có thanh tiến trình như wget?


55

Xin lưu ý rằng tôi không hỏi làm thế nào . Tôi đã biết các tùy chọn như pvrsync -P.

Tôi muốn hỏi tại sao không cpthực hiện một thanh tiến trình, ít nhất là một cờ?


7
Làm thế nào về "Tác giả không cảm thấy cần thiết cho nó"?
phunehehe

7
Đối với độc giả không biết pvrsync -P, xem file di chuyển với thanh tiến trình ( một trong những câu trả lời trích dẫn một bản vá để cpđể cp -gđưa ra một chỉ số tiến bộ).
Gilles 'SO- ngừng trở nên xấu xa'

2
Một nơi tốt hơn để hỏi sẽ nằm trong danh sách gửi thư của người dùng coreutils mới (kể từ năm 2010).
Faheem Mitha

Câu trả lời:


57

Truyền thống trong các công cụ unix là chỉ hiển thị thông báo nếu có sự cố. Tôi nghĩ rằng đây là cả vì lý do thiết kế và thực tế. Thiết kế nhằm mục đích làm cho nó rõ ràng khi có sự cố xảy ra: bạn nhận được thông báo lỗi và nó không bị chìm trong các thông báo không thực sự có thông tin. Lý do thực tế là trong những ngày đầu tiên của unix, vẫn có những máy điện báo ; nghĩa là, đầu ra từ các chương trình sẽ được in trên giấy và bạn không muốn in các thanh tiến trình.

Dù lý do là gì, truyền thống chỉ hiển thị các thông điệp hữu ích đã bị mắc kẹt trong thế giới unix. Các công cụ hiện đại đôi khi đã giới thiệu các thanh tiến trình; trong trường hợp của rsync, động lực chính là rsync thường được thực hiện qua mạng và mạng rất mềm hơn so với các đĩa cục bộ, vì vậy thanh tiến trình sẽ hữu ích hơn. Lý do tương tự áp dụng cho wget.


6
Điều này. Và cpquay trở lại đầu những năm 1970: đó là truyền thống như bạn có thể nhận được.
dmckee

3
@dmckee Vậy tại sao có thể ddđưa ra báo cáo tiến độ? ddquay trở lại năm 1966 (HĐH / 360). Các công cụ Unix có thể dài dòng nếu người dùng muốn chúng dài dòng, nhưng thật không may, bạn không thể nói cp dài dòng sẽ như thế nào (chỉ có một mức độ chi tiết bổ sung -v:).
taffer

7
@taffer ddđặc biệt theo nhiều cách (rõ ràng nhất là cú pháp tùy chọn của nó) bởi vì nó không phải từ unix, nó là một bản sao của một công cụ IBM. Ngoài ra, nó chủ yếu được sử dụng cho các tác vụ dài trên băng, vì vậy các tin nhắn của nó bảo bạn quay lại sau giờ nghỉ, không giống như cptrong hầu hết các trường hợp bạn chỉ cần chớp mắt và nhận lại lời nhắc.
Gilles 'SO- ngừng trở nên xấu xa'

16

Trong thế giới unix, mỗi công cụ được thiết kế để thực hiện một công việc và thực hiện tốt công việc đó. Tại sao lại cplo lắng về việc xuất tiến trình khi một công cụ khác đã làm như pvvậy? Trong cùng một lý do, tại sao rất nhiều chương trình đổ công cụ lên màn hình mà không có phân trang? Bởi vì đã có các công cụ cho công việc đó như more(hoặc less). Tại sao hầu hết các chương trình yêu cầu chỉnh sửa tệp KHÔNG trình bày cho bạn một trình soạn thảo và thay vào đó thuê ngoài để $EDITORthay thế? Bởi vì điều đó khiến mọi người thực hiện một nhiệm vụ mà họ được thiết kế để thực hiện và người dùng sử dụng trình chỉnh sửa yêu thích của họ cho tất cả các tác vụ.

Tiếp theo, hầu hết các chương trình shell được thiết kế để đầu ra của chúng được đưa vào các chương trình shell khác. Đầu ra duy nhất mà họ có khả năng đưa ra là những thứ sẽ hữu ích để phân tích cú pháp trong lệnh tiếp theo trong chuỗi. Các chương trình như cpđược sử dụng trong các tập lệnh cũng như thủ công từ một thiết bị đầu cuối, vì vậy đầu ra của nó được tập trung xung quanh mã thoát và danh sách các tệp không thành công hoặc thành công.

Luôn mong đợi kết hợp các công cụ để thực hiện hiệu quả mong muốn của bạn.


3
pvtồn tại khi cpđược viết? Đó là một điểm tốt, nhưng tôi có cảm giác rằng trong trường hợp này, cpban đầu được cố tình viết mà không có đầu ra tiến bộ, không liên quan gì đến các công cụ khác, chỉ là những lý do khác mà bạn và Gilles trích dẫn.
Cascabel

1
@Jefromi: Tôi không chắc nó có vấn đề gì. Đây không phải là một câu hỏi lịch sử về lý do tại sao nó cplà một cách khi nó được mã hóa lần đầu tiên. Câu hỏi là tại sao bây giờ lại như vậy . Đã được rất nhiều năm và ai đó có thể đã thêm chức năng, nhưng rõ ràng đã quyết định không. Tôi chắc chắn rằng có sẵn các yếu tố công cụ khác trong quyết định đó.
Caleb

3

Đây là một trong những điều ngoài lề khi có các đối số và chống lại việc thêm tùy chọn thanh tiến trình vào cp. Lập luận chính chống lại, là bạn có thể không biết trước về thời gian mà bạn muốn biết tiến trình. Ctrl-T / SIGINFO có sẵn trên BSD cho mục đích này và nếu điều đó trở nên khả dụng trên nền tảng GNU / Linux, thì có thể có nhiều lý do hơn để kích hoạt logic thanh tiến trình trong cp. Trong khi chờ đợi một giải pháp tổng quát hơn là sử dụng một công cụ riêng biệt như các Progress Viewer coreutils ( progress, trước đây được biết như là cv) để hiển thị trạng thái của bất kỳ quá trình trên hệ thống.

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.