chuyển hướng mèo


11

Nói một tập tin được gọi là abctồn tại trong thư mục hiện tại và nó có một số văn bản trong đó. Khi bạn thực hiện lệnh:

cat abc > abc

Tại sao nội dung của tập tin abcbiến mất?
Tại sao lệnh xóa văn bản trong đó và tệp trở thành một tệp trống?



10
Một con trỏ laser là một công cụ rất hiệu quả để chuyển hướng mèo. </ chơi>
WBT

Con mèo của tôi phản ứng rất kém với việc chuyển hướng ...
Ex Umbris

Để tránh vấn đề này, tôi sử dụng một bản mô tả nhỏ mà tôi gọi là chó :cat abc | dog abc
joeytwiddle

Một tùy chọn khác, nếu bạn không quan tâm đến đầu ra trên màn hình, là sử dụng tee.
Andrea Lazzarotto

Câu trả lời:


27

Bởi vì thứ tự làm thế nào mọi thứ được thực hiện.

Khi bạn làm:

cat abc > abc

>là toán tử chuyển hướng đầu ra, khi shell nhìn thấy nó, nó sẽ mở tệp ở chế độ cắt xén bằng cách sử dụng O_TRUNCcờ với open(2)nghĩa là open("abc", O_TRUNC), vì vậy bất cứ thứ gì có trong tệp sẽ biến mất. Lưu ý rằng, việc chuyển hướng này được thực hiện trước tiên bởi trình bao trước khi catlệnh chạy.

Vì vậy, khi lệnh cat abcthực thi, tệp abcđã bị cắt bớt do đó catsẽ tìm thấy tệp trống.


1
Còn mèo abc >> abc thì sao? Điều gì xảy ra sau đó?
Tulsi Kanodia

2
@TulsiKanodia - gây ra một vòng lặp vô hạn. Mỗi lần mèo đọc một dòng, nó sẽ nối thêm một dòng khác trước khi chuyển sang dòng tiếp theo.
dùng3490

3
Điều này được phát hiện và ngăn chặn. Thay vào đó, văn bản cat: filename: input file is output file( filenametên tệp bạn đã chọn) được in trên thiết bị xuất chuẩn cũ.
UTF-8


5

Thêm vào câu trả lời của @ heemayl , nếu bạn muốn mã rõ ràng hơn về trình tự xảy ra, bạn có thể chỉ cần đặt bất kỳ chuyển hướng nào khi bắt đầu lệnh:

> abc cat abc
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.