TLDR: This works:
( ( bar foo ) 1>&- 2>&- & )
So, basically, what this does is run a sub-shell then bury your commands in another sub-shell and closes all STDOUT being reported and is sent to the background. I honestly am still not sure how this works!
Because I use shellcheck with my zsh scripts the following flagged an unknown error in shellcheck (because shellcheck does not support zsh at the moment) and it wouldn't lint the file:
() ( foo bar ) &> /dev/null &!
Specifically it was the
&! that wasn't working (but is a valid ZSH directive to suppress background output). I would always get job output at the least using most of the suggestions e.g. on Stack Exchange. So, I went down a Googling-rabbit-hole with no answers, until I landed on:
Which I then had to grok the horrible formatting and came up with the above that is Bash compatible to run commands in the background with no output!
Oldest comments (3)
Updated to use
) > /dev/null & )since I found output being present when using
) & )
Another update to use
) 1>&- 2>&- & )today, as I still was getting output! See cyberciti.biz/faq/how-to-redirect-... on why I chose this. Really it's because it seems to just be working :)
Nice post, I liked the idea. If you would like to collaborate on similar topics and matterialize some ideas, you can find us here:
🪄 wiki.zshell.dev 🧙♀️