DEV Community

Aubrey Portwood
Aubrey Portwood

Posted on • Updated on

How to run commands in a sub-shell and suppress output in the background that's ZSH & shellcheck compatible

TLDR: This works:

( (
    bar
    foo

) 1>&- 2>&- & )
Enter fullscreen mode Exit fullscreen mode

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 &!
Enter fullscreen mode Exit fullscreen mode

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:

→ https://www.baeldung.com/linux/run-multiple-commands-in-background

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!

🙌

Top comments (3)

Collapse
 
aubreypwd profile image
Aubrey Portwood

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 :)

Collapse
 
aubreypwd profile image
Aubrey Portwood

Updated to use ) > /dev/null & ) since I found output being present when using ) & )

Some comments may only be visible to logged-in visitors. Sign in to view all comments.