<,> และ >> ใช้สำหรับการเปลี่ยนทิศทางอินพุต / เอาต์พุตสำหรับคำสั่ง - ซึ่งเป็นคุณลักษณะที่จัดทำโดยเชลล์ (เช่น bash) ดังนั้นหากคุณพิมพ์คำสั่งเช่นsudo cat > /var/www/info.php
นั้นเชลล์ที่ได้รับสิ่งนี้เป็นอินพุตพยายามเปิดไฟล์/var/www/info.php
และให้ไฟล์นั้นเป็นเอาต์พุตมาตรฐานของsudo
คำสั่ง sudo
คำสั่งจะไม่ทราบแม้กระทั่งว่าผลผลิตของตนเป็นไปคอนโซลหรือเปลี่ยนเส้นทางไปยังแฟ้มนี้เพราะได้รับการดูแลจากเปลือกที่จะเรียกมัน
หากเชลล์ที่คุณพิมพ์คำสั่งของคุณคือเชลล์ล็อกอินหรือเชลล์อื่นที่รันในเทอร์มินัลที่มี ID ผู้ใช้ของคุณแสดงว่ามีสิทธิ์เช่นเดียวกับ ID ผู้ใช้ของคุณ
ดังนั้นในกรณีของคุณในขณะที่คำสั่ง cat ถูกเรียกใช้เป็นรูทการคัดลอกเอาต์พุตไปยัง/var/www/info.php
พยายามโดยเชลล์ที่รันในฐานะผู้ใช้ปกติซึ่งตามที่คาดไว้จะล้มเหลว
วิธีแก้ปัญหาสำหรับสถานการณ์เช่นนี้คือการใช้tee
คำสั่ง:
sudo tee /var/www/info.php
นั่นจะมีผลตามเจตนาของการวางข้อความทั้งหมดที่ใส่ไว้ที่คอนโซลไม่เกิน ^ D ลงในไฟล์ที่ระบุเป็นพารามิเตอร์
อาจมีผลข้างเคียงที่ไม่พึงtee
ประสงค์หนึ่งที่อาจสะท้อนเอาต์พุตไปยัง stdout ดังนั้นหลังจากคุณพิมพ์แต่ละบรรทัดแล้วกด Entertee
จะส่งสำเนาของมันกลับมา เพื่อหลีกเลี่ยงปัญหานี้คุณสามารถใช้ตัวแปรต่อไปนี้
sudo tee /var/www/info.php > /dev/null
รายละเอียดเกี่ยวกับtee
สามารถมีได้ผ่านทางinfo tee
สถานี