it-roy-ru.com

Как запустить сценарий оболочки в фоновом режиме и не получать вывод

Я написал два сценария оболочки a.sh и b.sh. В a.sh и b.sh у меня есть бесконечный цикл for, и они выводят некоторый вывод на терминал. Я хочу написать другой скрипт, который вызывает как a.sh, так и b.sh, но я хочу, чтобы пользователь немедленно восстановил контроль над терминалом, вместо того, чтобы скрипт выполнялся бесконечно, и я хочу скрыть вывод в терминале.

87
Behnam Safari

Используйте Nohup, если ваша фоновая работа занимает много времени, или вы просто используете SecureCRT или что-то вроде этого, войдите на сервер. 

Перенаправьте stdout и stderr на /dev/null, чтобы игнорировать вывод.

Nohup /path/to/your/script.sh > /dev/null 2>&1 &
184
George

Перенаправьте вывод в файл следующим образом:

./a.sh > somefile 2>&1 &

Это перенаправит как stdout, так и stderr в один и тот же файл. Если вы хотите перенаправить stdout и stderr в два разных файла, используйте это:

./a.sh > stdoutfile 2> stderrfile &

Вы можете использовать /dev/null как один или оба файла, если вам не нужны stdout и/или stderr. 

Смотрите bash manpage для подробностей о перенаправлениях.

27
Adam Zalcman

Извините, это немного поздно, но мы нашли идеальное решение для нескольких команд, где вы не хотите никаких стандартных выводов или сообщений об ошибках (благодарность за это: http://felixmilea.com/2014/12/running-bash-commands -background-правильно/ )

Это перенаправляет вывод на ноль и сохраняет экран чистым:

command &>/dev/null &
17
DanteAlighieri

Если они находятся в том же каталоге, что и ваш скрипт, который содержит:

./a.sh > /dev/null 2>&1 &
./b.sh > /dev/null 2>&1 &

& в конце - это то, что заставляет ваш скрипт работать в фоновом режиме.

Часть > /dev/null 2>&1 не нужна - она ​​перенаправляет потоки stdout и stderr, поэтому вам не нужно видеть их на терминале, что может потребоваться для шумных сценариев с большим количеством выходных данных.

12
Michael Chinen

Запустите в подоболочке, чтобы удалить уведомления и закрыть STDOUT и STDERR:

(&>/dev/null script.sh &)
1
Tom Hale

Эти примеры отлично работают:

Nohup sh prog.sh proglog.log 2> & 1 &

Для цикла вы можете использовать так:

для меня в {1..10}; до ш прог.ш; сон 1; сделано prog.log 2> & 1 &

Он работает в фоновом режиме и не показывает никакого вывода.

0
Ramin Ismayilli
Nohup sh -x runShellScripts.sh &
0
vaquar khan

Если вы хотите запустить скрипт в кикстарте Linux, вы должны запустить его, как показано ниже.

sh /tmp/script.sh > /dev/null 2>&1 < /dev/null &
0
SARATH CHANDRAN