All shells and all pipelines would break. Having a file descriptor persist across execve is
the usual way to "inherit" [share] stdin, stdout, stderr for a new application main program.
Many shell scripts themselves would break, because they rely on subprocesses reading only a
portion of the data (such as one line, one command, one expression) that they could read from
stdin, then leaving the fd open at the correct position for the parent process (and its
children) to read the next portion.