Trong dòng này:
tr a A < /etc/hosts | sort -r |pr -d > /etc/hosts
kết quả mong đợi là gì? Tôi biết chữ thường 'a' sẽ đổi thành chữ hoa 'A' nhưng tiếp theo là gì? Tập tin gốc sẽ bị ghi đè vì chuyển hướng đến cùng tên tập tin?
Trong dòng này:
tr a A < /etc/hosts | sort -r |pr -d > /etc/hosts
kết quả mong đợi là gì? Tôi biết chữ thường 'a' sẽ đổi thành chữ hoa 'A' nhưng tiếp theo là gì? Tập tin gốc sẽ bị ghi đè vì chuyển hướng đến cùng tên tập tin?
Câu trả lời:
Kết quả mong đợi là một /etc/hosts
tập tin trống .
Chuyển hướng > /etc/hosts
xảy ra và cắt ngắn tệp trước khi chương trình bắt đầu chạy và tr
bắt đầu đọc từ tệp.
Để ghi đầu ra vào /etc/hosts
, bạn có thể làm việc với một bản sao của tệp (hoặc di chuyển tệp đầu ra của bạn vào vị trí sau đó) hoặc sử dụng sponge
lệnh từ moreutils , sẽ tiếp nhận đầu vào tiêu chuẩn và ghi vào tệp:
tr a A < /etc/hosts | sort -r | pr -d | sponge /etc/hosts
Trong trường hợp đó, mỗi "a" trong /etc/hosts
sẽ được thay thế bằng "A", tất cả các dòng sẽ được sắp xếp ngược lại theo ngôn ngữ của bạn , một dòng trống sẽ được chèn vào giữa mỗi dòng và kết quả sẽ được đưa vào /etc/hosts
.
Bạn cũng có thể thấy hữu ích:
bash: /etc/hosts: Permission denied
lỗi (giả sử vỏ của bạn bị lỗi), trừ khi bạn đang chạy cái này nhưroot
./etc/hosts
thường chỉ có thể ghi bằng root. Nếu bạn đang chạy cái này nhưroot
(mà bạn thực sự không nên), bạn sẽ thấy trống rỗng/etc/hosts
như Michael Homer giải thích.