Có phải "làm một việc một lúc" không?
Nhận xét này nghe giống như một câu hỏi về một nguyên tắc thiết kế chung. Thông thường, các câu hỏi về những điều này rất chủ quan, và chúng tôi không thể viết một câu trả lời thích hợp. Được cảnh báo rằng chúng tôi có thể đóng câu hỏi trong trường hợp này.
Đôi khi chúng tôi có một lời giải thích cho sự lựa chọn thiết kế ban đầu, bởi vì (các) nhà phát triển đã viết về chúng. Nhưng tôi không có câu trả lời hay cho câu hỏi này.
Tại sao cp
được thiết kế theo cách này?
Vấn đề là Unix đã hơn 40 tuổi.
Nếu bạn đang tạo một hệ thống mới bây giờ, bạn có thể đưa ra các lựa chọn thiết kế khác nhau. Nhưng thay đổi Unix sẽ phá vỡ các tập lệnh hiện có, như được đề cập trong các câu trả lời khác.
Tại sao được cp
thiết kế để âm thầm ghi đè lên các tập tin hiện có?
Câu trả lời ngắn gọn là "Tôi không biết" :-).
Hiểu rằng đó cp
chỉ là một vấn đề. Tôi nghĩ rằng không có chương trình lệnh gốc nào được bảo vệ chống lại việc ghi đè hoặc xóa các tập tin. Shell có một vấn đề tương tự khi chuyển hướng đầu ra:
$ cat first.html > second.html
Lệnh này cũng âm thầm ghi đè second.html
.
Tôi quan tâm để nghĩ làm thế nào tất cả các chương trình này có thể được thiết kế lại. Nó có thể đòi hỏi một số phức tạp thêm.
Tôi nghĩ rằng đây là một phần của lời giải thích: Unix ban đầu nhấn mạnh việc triển khai đơn giản . Để giải thích chi tiết hơn về điều này, hãy xem "tệ hơn là tốt hơn", được liên kết ở cuối câu trả lời này.
Bạn có thể thay đổi > second.html
để nó dừng lại với một lỗi, nếu second.html
đã tồn tại. Tuy nhiên, như chúng tôi đã đề cập, đôi khi người dùng không muốn thay thế một tệp hiện có. Ví dụ, cô ấy có thể đang xây dựng một lệnh phức tạp, thử nhiều lần cho đến khi nó làm được điều cô ấy muốn.
Người dùng có thể chạy rm second.html
trước nếu cô ấy cần. Đây có thể là một sự thỏa hiệp tốt! Nó có một số nhược điểm có thể có của riêng nó.
- Người dùng phải nhập tên tệp hai lần.
- Mọi người cũng gặp nhiều rắc rối khi sử dụng
rm
. Vì vậy, tôi cũng muốn làm cho rm
an toàn hơn. Nhưng bằng cách nào? Nếu chúng tôi rm
hiển thị từng tên tệp và yêu cầu người dùng xác nhận, giờ đây cô ấy phải viết ba dòng lệnh thay vì một dòng. Ngoài ra, nếu cô ấy phải làm điều này quá thường xuyên, cô ấy sẽ tập thói quen và gõ "y" để xác nhận mà không cần suy nghĩ. Vì vậy, nó có thể rất khó chịu, và nó vẫn có thể nguy hiểm.
Trên một hệ thống hiện đại, tôi khuyên bạn nên cài đặt trash
lệnh và sử dụng nó thay vì rm
khi có thể. Việc giới thiệu bộ lưu trữ Thùng rác là một ý tưởng tuyệt vời, ví dụ như cho một PC đồ họa một người dùng .
Tôi nghĩ điều quan trọng là phải hiểu những hạn chế của phần cứng Unix gốc - dung lượng RAM và ổ đĩa bị giới hạn, đầu ra được hiển thị trên các máy in chậm cũng như hệ thống và phần mềm phát triển.
Lưu ý rằng Unix ban đầu không có tab hoàn thành , để nhanh chóng điền tên tệp cho một rm
lệnh. (Ngoài ra, trình bao Bourne ban đầu không có lịch sử lệnh, ví dụ như khi bạn sử dụng phím mũi tên Lên trong bash
).
Với đầu ra máy in, bạn sẽ sử dụng trình chỉnh sửa dựa trên dòng , ed
. Điều này khó học hơn một trình soạn thảo văn bản trực quan. Bạn phải in một số dòng hiện tại, quyết định cách bạn muốn thay đổi chúng và nhập lệnh chỉnh sửa.
Sử dụng > second.html
giống như sử dụng một lệnh trong trình chỉnh sửa dòng. Hiệu quả của nó phụ thuộc vào trạng thái hiện tại. (Nếu second.html
đã tồn tại, nội dung của nó sẽ bị loại bỏ). Nếu người dùng không chắc chắn về trạng thái hiện tại, cô ấy sẽ chạy ls
hoặc ls second.html
trước tiên.
"Thực hiện đơn giản" như một nguyên tắc thiết kế
Có một cách giải thích phổ biến về thiết kế Unix, bắt đầu:
Thiết kế phải đơn giản, cả về cách thực hiện và giao diện. Điều quan trọng là việc thực hiện phải đơn giản hơn giao diện. Đơn giản là sự xem xét quan trọng nhất trong một thiết kế.
...
Gabriel lập luận rằng "Tệ hơn là tốt hơn" đã tạo ra phần mềm thành công hơn so với phương pháp của MIT: Miễn là chương trình ban đầu về cơ bản là tốt, sẽ mất ít thời gian và công sức hơn để thực hiện ban đầu và sẽ dễ thích nghi hơn với các tình huống mới. Chuyển phần mềm sang các máy mới, chẳng hạn, trở nên dễ dàng hơn nhiều theo cách này. Do đó, việc sử dụng nó sẽ lan truyền nhanh chóng, rất lâu trước khi một chương trình [tốt hơn] có cơ hội được phát triển và triển khai (lợi thế đầu tiên).
https://en.wikipedia.org/wiki/Worse_is_better