log_user 0 set timeout 5 # T1: produce-then-exit child (echo writes then exits — no blocking read after) if {[catch {spawn /bin/echo READY-T1} e]} { puts "T1 spawn-err $e" } else { expect { "READY-T1" { puts "T1 match" } timeout { puts "T1 timeout" } eof { puts "T1 eof-first" } } expect { eof { puts "T1 eof-ok" } timeout { puts "T1 no-eof" } } } puts "---" # T2: multi-line producer then exit if {[catch {spawn /bin/sh -c {echo AAA; echo BBB}} e]} { puts "T2 spawn-err $e" } else { expect { "AAA" { puts "T2 gotA" } timeout { puts "T2 toA" } } expect { "BBB" { puts "T2 gotB" } timeout { puts "T2 toB" } } expect { eof { puts "T2 eof" } timeout { puts "T2 no-eof" } } } puts "MAP-DONE"; flush stdout