ฉันกำลังมองหาโปรแกรมที่จะคัดลอก 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
จะถูกละเว้น