Sigh. tail -f behavior is darn non-obvious: echo -e "one\ntwo\nthree" > test1 echo -e "four\nfive\nsix" > test2 (sleep .25 && echo seven >> test1 && sleep .25 && echo eight >> test2) & tail -f test1 test2 Expected output: ==> test1 <== one two three ==> test2 <== four five six ==> test1 <== seven ==> test2 <== eight