问题
I wrote two shell scripts a.sh
and b.sh
. In a.sh
and b.sh
I have a infinite for loop and they print some output to the terminal. I want to write another script which calls both a.sh
and b.sh
but I want the user to regain control of the terminal immediately, instead of having the script run infinitely and I want to hide the output in terminal.
回答1:
Use nohup
if your background job takes a long time to finish or you just use SecureCRT or something like it login the server.
Redirect the stdout and stderr to /dev/null
to ignore the output.
nohup /path/to/your/script.sh > /dev/null 2>&1 &
回答2:
Redirect the output to a file like this:
./a.sh > somefile 2>&1 &
This will redirect both stdout and stderr to the same file. If you want to redirect stdout and stderr to two different files use this:
./a.sh > stdoutfile 2> stderrfile &
You can use /dev/null
as one or both of the files if you don't care about the stdout and/or stderr.
See bash manpage for details about redirections.
回答3:
Sorry this is a bit late but found the ideal solution for somple commands where you don't want any standard or error output (credit where it's due: http://felixmilea.com/2014/12/running-bash-commands-background-properly/)
This redirects output to null and keeps screen clear:
command &>/dev/null &
回答4:
If they are in the same directory as your script that contains:
./a.sh > /dev/null 2>&1 &
./b.sh > /dev/null 2>&1 &
The &
at the end is what makes your script run in the background.
The > /dev/null 2>&1
part is not necessary - it redirects the stdout and stderr streams so you don't have to see them on the terminal, which you may want to do for noisy scripts with lots of output.
回答5:
Run in a subshell to remove notifications and close STDOUT and STDERR:
(&>/dev/null script.sh &)
回答6:
If you want to run the script in a linux kickstart you have to run as below .
sh /tmp/script.sh > /dev/null 2>&1 < /dev/null &
回答7:
nohup sh -x runShellScripts.sh &
回答8:
These examples work fine:
nohup sh prog.sh proglog.log 2>&1 &
For loop you can use like this :
for i in {1..10}; do sh prog.sh; sleep 1; done prog.log 2>&1 &
It works in background and does not show any output.
来源:https://stackoverflow.com/questions/9190151/how-to-run-a-shell-script-in-the-background-and-get-no-output