Stupid Unix trick: why you shouldn't pipe yes into yes


Update: M Tang's explanation for this is wrong, but Seth Schoen sent us a great correction


There's a GNU-coreutils program called yes whose function is to "output a string repeatedly until killed." M Tang tried piping the output of one yes command into another. It ended badly:

Taking a look at the source code for yes, it looks like the single argument is being stored in a char array, then, in a while(true) and for loop, each character is printed to the stdout, followed by a new line (\n) character.

So when we use the output of one yes command as the argument for another, the outer yes command fills up the computer's memory with the output of the inner yes command. Then I have to restart my computer and feel stupid.

yes 'yes no'

(via Hacker News)