Hacker News new | past | comments | ask | show | jobs | submit login
Running bash commands in the background properly (felixmilea.com)
32 points by felixmc on Dec 7, 2014 | hide | past | web | favorite | 9 comments

I found 'screen' to be pretty handy for running scripts in the background. Then you can also reattach later to look at stdout as it's running.

Screen or tmux. I tend to prefer tmux, but the both have this ability. I'm actuality surprised that there isn't a more elegant choice other than redirecting stdout and stderr to /dev/null where you can fork jobs to a background and reattach later to see the tty. Is there a shell that has a job queue that can be accessed from any number of shells?

There's this for attaching a running program to your terminal when it is not started in screen: https://github.com/nelhage/reptyr

Understanding whether background jobs get killed (via SIGHUP) or orphaned is not obvious without reading about the huponexit shopt. I've found some recent distros to not enable huponexit by default for login shells, and so this isn't always an issue.

More importantly, understanding how your jobs behave when your SSH session is killed can be a huge timesaver.

The random shell output from "background" apps never bothered me that much ;-) Crunchbang you can just press F2 and get auto-complete and launch commands with no shell output. Ubuntu has something similar. If you have terminator, just split the pane if you need a fresh one, or drag the terminal to another workspace and it's out of the way. Also tmux has ^bd to "detach" I think.

Wouldn't it be better to simply do

    "$@" "${FD[@]" &
And also remember to

    alias ds='ds '
to enable alias expansion.

would you mind explaining why that might be better?

It avoids a call to eval, which is always good. It's also a bit simpler.

Added to /bin/sh

Applications are open for YC Winter 2020

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact