Tại sao chuyển hướng đến cùng một tệp cắt ngắn tệp?


11

Thông thường chúng tôi sử dụng một tập tin khác nhau để chuyển hướng đầu ra.

Ví dụ :

cat < first > temp

Trong lệnh này, nội dung đầu tiên được chuyển hướng đến temp thay vì đầu ra tiêu chuẩn.

Vậy thì tại sao nó lại cắt bớt tệp nếu tôi sử dụng cùng tên tệp?

Tại sao nó không thể ghi đè lên cùng một tệp?

cat < first > first 

Câu trả lời:


19

Khi bạn sử dụng chuyển hướng I / O như thế, cả tệp "đầu vào" & "đầu ra" đều được mở bởi trình bao trước khi lệnh được thực thi. Và mở một tập tin để ghi đè cũng giống như cắt bớt nó trước khi viết. Kết quả: catthấy một tệp trống trên đầu vào ...


0

Bởi vì xử lý nó trong trường hợp chung sẽ rất phức tạp. Chỉ cần xem xét ví dụ sau:

Một chương trình đọc một dòng tệp theo dòng và xuất ra mỗi dòng hai lần. Bây giờ để điều này hoạt động mà không có tệp thứ hai (tức là trên cùng một tệp), chương trình sẽ cần phải đệm hầu hết (tất cả) các dòng mà nó sẽ đọc, vì chúng sẽ bị ghi đè nếu không chúng có thể được đọc.

Để giữ các vấn đề, các chương trình đơn giản thường sử dụng một tệp thứ cấp, tạm thời mà chúng di chuyển so với bản gốc sau khi hoàn tất. Đây là ví dụ làm thế nào sed -i(nội tuyến) hoạt động.


0

Thông thường cú pháp để chuyển hướng trong trường hợp này là trường hợp nên cat first > temp. Điều này có nghĩa catlà đầu ra của firstđược gửi đến tệp của temp. Trong trường hợp tuyên bố của bạn cat < first > temp, đầu ra catchưa được hoàn thành tại thời điểm nó được chuyển hướng ra ngoài một lần nữa. Không có gì trong kết quả trong không có gì ra.

Tuy nhiên, catmột tập tin và đầu ra được chuyển hướng đến một tập tin khác không khác gì một cơ bản cp.


cat < first > temphoạt động tốt
JanC
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.