Bash: Những gì mà >>> làm gì?


148

Tôi vừa thấy điều này được viết ra;

$ some-command >| /tmp/output.txt

Các ống đứng được sử dụng trong các chuyển hướng tiêu chuẩn "đường ống" đầu ra của lệnh này sang lệnh khác, >|trên thực tế có hoàn toàn vô dụng vì nó sẽ giống như >trong kịch bản này không?



Đối với phần còn lại của hình ảnh, tôi rất khuyến nghị các toán tử điều khiển và chuyển hướng của shell là gì?
tự đại diện

Câu trả lời:


220

Nó không vô dụng - đó là một hình thức chuyên biệt của >toán tử chuyển hướng đơn giản (và, có lẽ khó hiểu, không liên quan gì đến đường ống). bashvà hầu hết các shell hiện đại khác đều có tùy chọn noclobber, ngăn chuyển hướng ghi đè hoặc phá hủy một tệp đã tồn tại. Ví dụ: nếu noclobberlà đúng và tệp /tmp/output.txtđã tồn tại, thì điều này sẽ thất bại:

$ some-command > /tmp/output.txt

Tuy nhiên, bạn có thể ghi đè rõ ràng cài đặt noclobbervới >|toán tử chuyển hướng - chuyển hướng sẽ hoạt động, ngay cả khi noclobberđược đặt.

Bạn có thể tìm hiểu nếu noclobberđược đặt trong môi trường hiện tại của bạn với set -o.

Đối với ghi chú lịch sử, cả tùy chọn "noclobber" và tính năng bỏ qua của nó đều xuất phát từ csh(cuối thập niên 70). kshsao chép nó (đầu những năm 80) nhưng được sử dụng >|thay vì >!. POSIX đã chỉ định kshcú pháp (vì vậy tất cả các vỏ POSIX bao gồm bash, các dẫn xuất tro mới hơn được sử dụng như sh trên một số hệ thống hỗ trợ nó). Zsh hỗ trợ cả hai cú pháp. Tôi không nghĩ rằng nó đã được thêm vào bất kỳ biến thể vỏ Bourne nào nhưng tôi có thể sai.


3
@sch - lại ghi chú lịch sử của bạn (cảm ơn vì đã biết thêm thông tin, btw) - FreeBSD shnoclobber, kể từ khoảng tháng 5 năm 2002.
D_Bye
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.