The problem here is connecting a program you want to run to completion to the head command, not how rm handles SIGPIPE.
rm -vrf directory/ | (head; cat >/dev/null)In any case, I think that in the vast majority of pipelines, the default SIGPIPE behavior is not what is desired.
More real-life example fitting your model would be "start this long-running process and show me first 10 lines of output, just to make sure it didn't bail right away", but then, a more common pattern would be to keep a copy of the whole log too:
myfoo >/var/log/foo & tail -f /var/log/foo | head
Counter-example would be "yes", but also unordered sampling. Let's say I want to know if there is file with "foo" in its name somewhere in a very large directory, just a yes/no. Continuing directory traversal after finding one is a waste of time. SIGPIPE is desirable here as well: find directory/ -name '*foo*' | head -1The the Unix philosophy is that users are smart and should be obeyed, not that programs should do what they think should have asked for instead. Forcing the user to negotiate with the program like a TARDIS is madness