Lý do noclobber
không được đặt theo mặc định là truyền thống. Là một vấn đề của thiết kế giao diện người dùng, bạn nên tạo ra một tập tin mới, đó là một hành động dễ dàng và đặt thêm một trở ngại cho hành động nguy hiểm hơn, đó là tạo một tập tin mới hoặc ghi đè lên một tập tin hiện có. Vì vậy, đó noclobber
là một ý tưởng tốt ( >
để tạo một tệp mới, >|
có khả năng ghi đè lên một tệp hiện có) và nó có thể đã được mặc định nếu vỏ được thiết kế một vài thập kỷ sau đó.
Tôi thực sự khuyên bạn nên sử dụng các mục sau trong tệp khởi động shell tương tác của bạn ( .bashrc
hoặc .zshrc
):
set -o noclobber
alias cp='cp -i'
alias mv='mv -i'
Trong mỗi trường hợp (chuyển hướng, sao chép, di chuyển), mục tiêu là thêm một trở ngại khi hoạt động có thể có tác dụng phụ là xóa một số dữ liệu hiện có, mặc dù việc xóa dữ liệu hiện tại không phải là mục tiêu chính của hoạt động. Tôi không đưa rm -i
vào danh sách này vì xóa dữ liệu là mục tiêu chính của rm
.
Hãy lưu ý rằng noclobber
và -i
là lưới an toàn . Nếu họ kích hoạt, bạn đã làm sai điều gì đó . Vì vậy, đừng sử dụng chúng như một cái cớ để không kiểm tra những gì bạn ghi đè! Vấn đề là bạn nên kiểm tra xem tệp đầu ra không tồn tại. Nếu bạn nói file exists: foo
hoặc overwrite 'foo'?
, điều đó có nghĩa là bạn đã phạm sai lầm và bạn sẽ cảm thấy tồi tệ và cẩn thận hơn. Cụ thể, đừng tập thói quen nói y
nếu được nhắc ghi đè (có thể là bí danh alias cp='yes n | cp -i' mv='yes n | mv -i'
, nhưng nhấn Ctrl+ Clàm cho đầu ra trông đẹp hơn): nếu bạn có ý định ghi đè, hủy lệnh, di chuyển hoặc xóa đầu ra tập tin và chạy lại lệnh
Điều quan trọng là đừng có thói quen kích hoạt các két sắt đó bởi vì nếu bạn làm như vậy, một ngày nào đó bạn sẽ ở trên một máy không có cấu hình của bạn và bạn sẽ mất dữ liệu vì các biện pháp bảo vệ mà bạn đang tính đến ' t ở đó
noclobber
sẽ chỉ được đặt cho các vỏ tương tác, vì .bashrc
hoặc .zshrc
chỉ được đọc bởi các vỏ tương tác. Tất nhiên, bạn không nên thay đổi các tùy chọn shell theo cách có thể ảnh hưởng đến các tập lệnh, vì nó có thể phá vỡ các tập lệnh đó.
rm *
...