Построение ответа ngoozeff
, если вы хотите, чтобы команда выполняла полностью в фоновом режиме (т. Е. Если вы хотите скрыть вывод и предотвратить его уничтожение при закрытии окна терминала), вместо этого вы можете сделать следующее:
cmd="google-chrome";
"${cmd}" &>/dev/null &disown;
&
(первый) отсоединяет команду отstdin
.
>/dev/null
отсоединяет сеанс оболочки от stdout
, а stderr
.
&disown
удаляет команду из списка заданий оболочки .
Вы также можете использовать &!
вместо &disown
;они обе - одна и та же команда.
Кроме того, при помещении команды в переменную более уместно использовать eval "${cmd}"
вместо "${cmd}"
:
cmd="google-chrome";
eval "${cmd}" &>/dev/null &disown;
Если выЗапустите эту команду непосредственно в Терминале , она покажет PID процесса, который запускает команда.Но внутри сценария оболочки , вывод не выводится .
Вот функция для него:
#!/bin/bash
# Run a command in the background.
_evalBg() {
eval "$@" &>/dev/null &disown;
}
cmd="google-chrome";
_evalBg "${cmd}";
http://felixmilea.com/2014/12/running-bash-commands-background-properly/