Как запустить скрипт в фоновом режиме и вам нет выхода
Я написал два сценария оболочки a.sh и b.sh. In a.sh и b.sh у меня есть бесконечный цикл for, и они печатают некоторые выходные данные на терминал. Я хочу написать другой скрипт, который вызывает оба a.sh и b.sh но я хочу, чтобы пользователь немедленно восстановил контроль над терминалом, вместо того, чтобы бесконечно запускать скрипт, и я хочу скрыть вывод в терминале.
8 ответов:
использовать
nohup
Если ваша фоновая работа занимает много времени, чтобы закончить или вы просто используете SecureCRT или что-то вроде этого войти на сервер.перенаправить stdout и stderr до
/dev/null
игнорировать выход.nohup /path/to/your/script.sh > /dev/null 2>&1 &
перенаправить вывод в файл, как это:
./a.sh > somefile 2>&1 &
Это позволит перенаправить stdout и stderr в один файл. Если вы хотите перенаправить stdout и stderr в два разных файла, используйте это:
./a.sh > stdoutfile 2> stderrfile &
можно использовать
/dev/null
как один или оба файла, если вы не заботитесь о stdout и / или stderr.посмотреть bash manpage для получения дополнительной информации о перенаправлениях.
извините, это немного поздно, но нашел идеальное решение для некоторых команд, где вы не хотите никаких стандартных или ошибок вывода (кредит, где это должно:http://felixmilea.com/2014/12/running-bash-commands-background-properly/)
это перенаправляет вывод на null и сохраняет экран чистым:
command &>/dev/null &
, если они находятся в том же каталоге, где скрипт, который содержит:
./a.sh > /dev/null 2>&1 & ./b.sh > /dev/null 2>&1 &
The
&
в конце это то, что заставляет ваш скрипт работать в фоновом режиме.The
> /dev/null 2>&1
часть не нужна - она перенаправляет потоки stdout и stderr, поэтому вам не нужно видеть их на терминале, что вы можете сделать для шумных сценариев с большим количеством выходных данных.
запустите в подрешетке, чтобы удалить уведомления и закрыть STDOUT и STDERR:
(&>/dev/null script.sh &)