Unfortunately, macOS does not support proofs, so there’s no nice way to do it the way you recommended. I can just force-close the first 1024 file descriptors that I don’t care about, and hope that it’s sufficient. On Sat, May 21, 2022 at 3:02 PM Bart Schaefer wrote: > On Fri, May 20, 2022 at 11:32 PM Zach Riggle wrote: > > > > This is probably an usual request, but is there any way to close (or > redirect to /dev/null) all open file descriptors known / opened by zsh? > > I expected this to work if you have /proc/: > > opened=(/proc/self/fd/*(:t)) wanted=(0 1 2 10) > for close in ${^${opened:|wanted}}; exec {close}>&- > > But zsh temporarily opens a file descriptor (for xtrace output, I > believe) during the assignment to $opened, and it's not possible to > predict what number that descriptor will have, which means one of > those exec is going to error on bad file descriptor and kill the loop. > > So ... the following seems to be pretty good, though on repeated tries > I have sometimes seen descriptors remain open: > > integer close > for close in /proc/self/fd/*(:t); [[ -h /proc/self/fd/$close && ! -t > $close ]] && exec {close}>&- > > > Is there a way to close all of them in a concise way that does not > affect e.g. shell pipelines and redirection (i.e., stdout and stderr)? > > No guarantees about that. If there are descriptors open for temporary > files, etc., that are needed by coproc or whatever, this could break > it. > -- *Zach Riggle*