คำสั่ง tee ใน Linux Shell/บรรทัดคำสั่ง แบ่งเอาต์พุทของแอปพลิเคชัน – ส่งเอาต์พุทไปยังทั้งไฟล์ และ STDOUT (คอนโซลหรือแอปพลิเคชันอื่น) นี่คือวิธีใช้งาน
คำสั่ง tee ได้ชื่อมาจาก T-splitter ที่ใช้ในงานประปา – ท่อที่เปลี่ยนทิศทางน้ำจากแหล่งเดียวไปสองทิศทาง
ไวยากรณ์คำสั่ง tee
tee เป็นคำสั่งที่มีวัตถุประสงค์และไวยากรณ์ง่ายๆ:
tee OPTIONS FILE
โปรดทราบว่า:
- OPTIONS เป็นรายการตัวเลือกจากตารางด้านล่าง
- FILE คือเส้นทางไปยังไฟล์ที่คุณต้องการให้เอาต์พุทถูกบันทึก
- Input ต้องถูก pipe หรือ redirect ไปยัง tee – มิฉะนั้นมันไม่มีอะไรให้ทำงาน
- สิ่งนี้ทำได้โดยการ redirect standard input/output – ดูตัวอย่างด้านล่าง
- tee จะส่งออกข้อมูลที่ให้มา ทั้งไปยัง FILE ที่ระบุ และ STDOUT (standard output)
- โดยค่าเริ่มต้นจะแสดงบนคอนโซล แต่สามารถ redirect ไปยังแอปพลิเคชันอื่นได้
ตัวเลือก (Options)
นี่คือตัวเลือกที่ใช้บ่อยที่สุดสำหรับคำสั่ง tee:
| ตัวเลือก | คำอธิบาย |
|---|---|
| -a, --append | ต่อท้าย (append) ไปยัง FILE ที่กำหนด ไม่เขียนทับ |
| -i, --ignore-interrupts | ละเลยสัญญาณ interrupt |
สำหรับตัวเลือกเพิ่มเติม รวมถึงวิธีวินิจฉัยข้อผิดพลาด คุณสามารถดูคู่มือผู้ใช้ได้โดยรัน:
man tee
ตัวอย่างคำสั่ง tee
นี่คือตัวอย่างง่ายๆ ของการใช้ tee
ตัวอย่างทั้งหมดนี้ใช้คำสั่ง echo ซึ่งเพียงแค่ส่งออกข้อความที่ให้มา
ดูและบันทึก Output จากคำสั่งไปยังไฟล์ใหม่
ผลลัพธ์ของคำสั่ง echo จะถูก pipe ไปยัง tee ซึ่งจะบันทึกลงไฟล์และแสดงบนคอนโซลพร้อมกัน:
echo "hello!" | tee hello.txt
หากไฟล์ hello.txt มีอยู่แล้ว จะถูกเขียนทับ
ดูและบันทึก Output จากคำสั่งไปยังไฟล์ที่มีอยู่
ตัวอย่างนี้ทำเหมือนข้างต้น แต่จะต่อท้ายไปที่ท้ายไฟล์ที่มีอยู่ แทนที่จะเขียนทับ:
echo "hello again!" | tee -a hello.txt
บันทึกหรือต่อท้าย Output ไปยังหลายไฟล์
สามารถระบุหลายไฟล์ได้ คั่นด้วยช่องว่าง:
echo "hello several files!" | tee hello1.txt hello2.txt hello3.txt
Redirect/Pipe Output ของ tee
Standard output ของ tee สามารถ pipe และ redirect ได้ ตัวอย่างด้านล่างจะบันทึกผลลัพธ์ของ echo ไป hello.txt แล้ว output จะถูกส่งต่อไปยังคำสั่ง grep แทนที่จะแสดงบนคอนโซล:
echo "hello!" | tee hello.txt | grep hello
เพื่อตัวอย่าง grep command (ซึ่งใช้ค้นหาข้อความในอินพุท) เพียงแค่ค้นหาคำว่า "hello" จาก output ของ tee
การละเลย Interrupts
การละเลย interrupts (เช่น กด CTRL + C เพื่อออกจากคำสั่ง) สามารถทำให้ output จาก tee สะอาดขึ้น:
echo "hello!" | tee -i hello.txt
การใช้ tee กับ sudo
คำสั่ง sudo อนุญาตให้คุณรันคำสั่งเป็น root user โดยไม่ต้องล็อกอินเป็น root และมักใช้กัน
ใน snippet ต่อไปนี้ – sudo ไม่ อนุญาตให้คุณ redirect output ของคำสั่ง เนื่องจากคำสั่ง sudo เองไม่ได้ทำการ redirect เนื่องจากมันปรากฏก่อนสัญลักษณ์ redirect (>):
sudo echo "hello!" > /root/hello.txt
…สิ่งนี้จะล้มเหลวพร้อมข้อผิดพลาดสิทธิ์ เนื่องจากไดเรกทอรี /root ต้องการสิทธิ์ root แต่คำสั่ง sudo ใช้สิทธิ์เหล่านี้กับคำสั่ง echo เท่านั้น – ไม่ใช่ redirect ที่มาหลัง
เทคนิคเพื่อหลีกเลี่ยงเรื่องนี้คือใช้คำสั่ง tee:
echo "hello!" | sudo tee /root/hello.txt
สิ่งนี้จะทำงาน เพราะ output ของคำสั่ง echo ถูกส่งไปยัง tee ซึ่ง กำลัง รันด้วยสิทธิ์ผู้ดูแลระบบผ่าน sudo – และ tee บันทึก output