ฉันกำลังมองหาโปรแกรมที่จะคัดลอก stdin ไปยัง stdout ขณะที่แสดงตัวควบคุม (เช่น cat -v ) และไม่ต้องรอ EOF (อินพุตมาจาก a tail -f ) ฉันมี GNU | Linux; cat ที่ติดตั้งจะไม่สนใจ -u ธง.
ฉันกำลังมองหาโปรแกรมที่จะคัดลอก stdin ไปยัง stdout ขณะที่แสดงตัวควบคุม (เช่น cat -v ) และไม่ต้องรอ EOF (อินพุตมาจาก a tail -f ) ฉันมี GNU | Linux; cat ที่ติดตั้งจะไม่สนใจ -u ธง.
คำตอบ:
GNU cat ละเว้น -u เพราะมันเป็นผลลัพธ์ ไม่อับชื้นเสมอไป . ดังนั้นเมื่อคุณขอผลลัพธ์ที่ไม่มีข้อผิดพลาดด้วย -uคุณจะได้รับมัน (แต่คุณจะได้รับมันด้วยแม้ว่าคุณจะไม่ขอมันก็ตาม)
GNU tail มีพฤติกรรมที่ไม่เปลี่ยนแปลงเสมอ
เพื่อพิสูจน์สิ่งนี้ในเปลือกหนึ่งฉันได้:
while :; do echo -ne "hello\t"; sleep 1;done > testtail
ซึ่งผนวกคำว่า 'hello' ตามด้วยแท็บทุกวินาที (โดยไม่มีการขึ้นบรรทัดใหม่)
ในเปลือกอื่นฉันได้ ( cat -T เหมือนกับ cat -v - มันแสดงแท็บเป็น ^ I):
tail -f testtail | cat -T
ซึ่งให้ฉัน:
hello^Ihello^Ihello^Ihello^I ...
อัพเดททุกวินาที
BSD cat 's -u ตัวเลือกปิดการใช้งานบัฟเฟอร์ออก จาก man cat:
-u Disable output buffering.
cat
cat (หรือเวอร์ชั่นใดก็ตามที่เป็นมาตรฐานบน Ubuntu) ฉันเดาว่าฉันควรจะเจาะจงมากขึ้น ...
-uจะถูกละเว้น