ชี้แจงเล็กน้อยว่าทำไมตัวเลือกทีออฟจึงดีกว่า
สมมติว่าคุณมีสิทธิ์ที่เหมาะสมในการเรียกใช้งานคำสั่งที่สร้างเอาต์พุตหากคุณไพพ์เอาต์พุตของคำสั่งของคุณเป็น tee คุณจะต้องยกระดับสิทธิพิเศษของ tee ด้วย sudo และ tee โดยตรงเพื่อเขียน (หรือผนวก) ไปยังไฟล์ที่เป็นปัญหา
ในตัวอย่างที่ให้ไว้ในคำถามที่จะหมายถึง:
ls -hal /root/ | sudo tee /root/test.out
สำหรับตัวอย่างที่ใช้งานได้จริงมากขึ้น:
# kill off one source of annoying advertisements
echo 127.0.0.1 ad.doubleclick.net | sudo tee -a /etc/hosts
# configure eth4 to come up on boot, set IP and netmask (centos 6.4)
echo -e "ONBOOT=\"YES\"\nIPADDR=10.42.84.168\nPREFIX=24" | sudo tee -a /etc/sysconfig/network-scripts/ifcfg-eth4
ในแต่ละตัวอย่างเหล่านี้คุณกำลังใช้เอาต์พุตของคำสั่งที่ไม่มีสิทธิพิเศษและเขียนลงในไฟล์ที่โดยปกติจะเขียนได้โดย root ซึ่งเป็นจุดเริ่มต้นของคำถามของคุณ
มันเป็นความคิดที่ดีที่จะทำเช่นนี้เพราะคำสั่งที่สร้างเอาท์พุทไม่ได้ถูกดำเนินการด้วยสิทธิ์ยกระดับ ดูเหมือนจะไม่สำคัญที่นี่ด้วยecho
แต่เมื่อคำสั่ง source เป็นสคริปต์ที่คุณไม่ไว้วางใจอย่างสมบูรณ์มันเป็นสิ่งสำคัญ
หมายเหตุคุณสามารถใช้ตัวเลือก -a เพื่อทีจะต่อท้าย (เช่น>>
) ต่อท้ายไฟล์เป้าหมายแทนที่จะเขียนทับ (เช่น>
)