ในบรรทัดนี้:
tr a A < /etc/hosts | sort -r |pr -d > /etc/hosts
ผลลัพธ์ที่คาดหวังคืออะไร ฉันรู้ว่าตัวพิมพ์เล็ก 'a' จะเปลี่ยนเป็นตัวพิมพ์ใหญ่ 'A' แต่จะทำอะไรต่อไป ไฟล์ต้นฉบับจะถูกเขียนทับเนื่องจากการเปลี่ยนเส้นทางเป็นชื่อไฟล์เดียวกันหรือไม่
ในบรรทัดนี้:
tr a A < /etc/hosts | sort -r |pr -d > /etc/hosts
ผลลัพธ์ที่คาดหวังคืออะไร ฉันรู้ว่าตัวพิมพ์เล็ก 'a' จะเปลี่ยนเป็นตัวพิมพ์ใหญ่ 'A' แต่จะทำอะไรต่อไป ไฟล์ต้นฉบับจะถูกเขียนทับเนื่องจากการเปลี่ยนเส้นทางเป็นชื่อไฟล์เดียวกันหรือไม่
คำตอบ:
ผลลัพธ์ที่คาดหวังคือ/etc/hostsไฟล์เปล่า
การเปลี่ยนเส้นทาง> /etc/hostsเกิดขึ้นและตัดทอนไฟล์ ก่อนที่โปรแกรมจะเริ่มทำงานและtrเริ่มอ่านจากไฟล์
หากต้องการเขียนเอาต์พุตลงไป/etc/hostsคุณสามารถทำงานกับสำเนาของไฟล์ (หรือย้ายไฟล์เอาต์พุตของคุณเข้าที่หลังจากนั้น) หรือใช้spongeคำสั่งจาก moreutilsซึ่งจะดูดซับอินพุตมาตรฐานและเขียนลงในไฟล์:
tr a A < /etc/hosts | sort -r | pr -d | sponge /etc/hosts
ในกรณีที่แต่ละ "A" ใน/etc/hostsจะถูกแทนที่ด้วย "A" สายทั้งหมดจะถูกจัดเรียงในการย้อนกลับไปตามสถานที่ของคุณ , บรรทัดว่างจะถูกแทรกระหว่างแต่ละบรรทัด/etc/hostsและผลที่จะใส่ลงใน
คุณอาจพบว่ามีประโยชน์:
bash: /etc/hosts: Permission deniedข้อผิดพลาด (สมมติว่าเปลือกของคุณเป็นทุบตี)rootถ้าคุณกำลังใช้งานนี้เป็น/etc/hostsโดยปกติสามารถเขียนได้โดยรูทเท่านั้น Iff คุณใช้สิ่งนี้เป็นroot(ซึ่งคุณไม่ควรทำจริงๆ) คุณจะว่างเปล่า/etc/hostsอย่างที่ Michael Homer อธิบาย