Ví dụ được đề xuất của bạn (bên dưới) không hoạt động vì bạn thực sự đang đọc và ghi vào cùng một tệp.
$ cat filename | sort | uniq > filename
Ý tưởng với một đường ống hoặc chuyển hướng là lệnh ở phía bên trái và bên phải của mỗi đường ống hoặc chuyển hướng chạy đồng thời, song song. Lệnh bên phải xử lý thông tin khi nó được chuyển cho nó từ lệnh bên trái, trong khi lệnh bên trái vẫn đang chạy.
Để kịch bản của bạn hoạt động, lệnh đọc từ tệp sẽ cần phải hoàn thành trước khi lệnh ghi vào tệp bắt đầu. Để làm việc này, trước tiên bạn cần chuyển hướng đầu ra vào một vị trí tạm thời, sau đó sau khi hoàn tất, hãy gửi nó từ vị trí tạm thời trở lại tệp.
Cách tốt hơn để làm điều này về cơ bản giống như trong ví dụ trước đây của bạn, khi bạn chuyển hướng đến một tệp tạm thời sau đó đổi tên tệp đó trở lại ban đầu (ngoại trừ việc bạn không cần xóa tệp trước, vì di chuyển sẽ xóa mọi mục tiêu hiện có) .
$ cat filename | sort | uniq > result
$ mv -f result filename
Bạn cũng có thể lưu nó vào một biến chuỗi, ngoại trừ chỉ hoạt động khi dữ liệu đủ nhỏ để phù hợp với bộ nhớ cùng một lúc.
echo $(cat filename | sort | uniq > result) > filename
hay cái gì đó Chỉ cần đi ngang qua, tôi không có thời gian để thử nó.