tr a </ etc / hosts | sort -r | pr -d> / etc / hosts


9

ในบรรทัดนี้:

tr a A < /etc/hosts | sort -r |pr -d > /etc/hosts 

ผลลัพธ์ที่คาดหวังคืออะไร ฉันรู้ว่าตัวพิมพ์เล็ก 'a' จะเปลี่ยนเป็นตัวพิมพ์ใหญ่ 'A' แต่จะทำอะไรต่อไป ไฟล์ต้นฉบับจะถูกเขียนทับเนื่องจากการเปลี่ยนเส้นทางเป็นชื่อไฟล์เดียวกันหรือไม่


คุณควรจะได้รับbash: /etc/hosts: Permission deniedข้อผิดพลาด (สมมติว่าเปลือกของคุณเป็นทุบตี) rootถ้าคุณกำลังใช้งานนี้เป็น /etc/hostsโดยปกติสามารถเขียนได้โดยรูทเท่านั้น Iff คุณใช้สิ่งนี้เป็นroot(ซึ่งคุณไม่ควรทำจริงๆ) คุณจะว่างเปล่า/etc/hostsอย่างที่ Michael Homer อธิบาย
arielf

คำตอบ:


17

ผลลัพธ์ที่คาดหวังคือ/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และผลที่จะใส่ลงใน


คุณอาจพบว่ามีประโยชน์:


1
ขอบคุณมากสำหรับการชี้แจงสิ่งที่ฉันควรคาดหวังด้วยวิธีการเขียนและวิธีการเขียนเพื่อให้ได้ผลลัพธ์ที่คาดหวัง
tdharrison

moreutilsเป็นชุดเครื่องมือที่ยอดเยี่ยมจริงๆ
Robert Riedl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.