3 ms·
Here is an example illustrating what I mean: #include <stdio.h> int main() { while (1) { fprintf(stdout, "Hi.\n"); fprintf
by vilhelm_s 15y ago
Here is an example illustrating what I mean:
#include <stdio.h>
int main() {
while (1) {
fprintf(stdout, "Hi.\n");
fprintf(stderr, "Hello.\n");
}
return 0;
}
If you run this program directly from the shell, every odd line says Hi and every even line says Hello. But if you run it through sexec (on a Linux machine at least), you get a large block of lines saying Hi, followed by a large block saying Hello, etc. Whether this is a problem or not of course depends on the use case. But to avoid it you need something more sophisticated than just pipes, e.g. the LD_PRELOAD hack in the original post.
- colmmacc 15y agoNow I get you. I'm tempted to write a small pty allocator which does enough to allow isatty() return true.
- catwell 15y agoOr you could just disable buffering, for instance with the unbuffer tool that comes with Expect: ./mytest | tee out.txt # blocks of Hello. and Hi. unbuffer ./mytest | tee out.txt # expected result
- burgerbrain 15y agoWithout looking at it's source, what 'unbuffer' does is likely allocate a PTY for the things under it. That's how the rest of Expect works after all ;)