ในบรรทัดนี้:
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 อธิบาย