Если я запускаю команду в фоновом режиме с &
, например:
sleep 2 &
когда команда заканчивается, я получаю "Готово". Как я могу избежать появления сообщения "Готово"?
Если я запускаю команду в фоновом режиме с &
, например:
sleep 2 &
когда команда заканчивается, я получаю "Готово". Как я могу избежать появления сообщения "Готово"?
Выполнить встроенную оболочку:
$ set +m
Это работает путем отключения "режима монитора", чтобы оболочка не сообщала о прекращении фоновых заданий.
Хотя команда запускается в подоболочке вроде:
$ (sleep 2&)
... также отключит сообщение, единственная причина, по которой оно работает, это то, что режим монитора включен по умолчанию только для интерактивных оболочек. То есть подоболочка избегает сообщения, запустив дополнительную оболочку с автоматическим «set +m».
Запустите команду в подоболочке:
(sleep 2 &)
Я хотел бы уточнить два предыдущих ответа. Если вы никогда не хотите видеть сообщение «Готово» из каких-либо команд в вашей оболочке, используйте set +m
. Просто поместите его в свой .profile и / или .bashrc и все готово. Обратите внимание, что если вы наберете это:
set +m
sleep 2 &
set -m
и сон заканчивается после последнего set -m
, вы все равно получите сообщение о готовности.
Если вы хотите отключить сообщение для одиночного вызова команды, лучше использовать метод subshell (sleep 2 &)
.
Честно говоря, я знал только о set +m
, поэтому +1 к Wooble за то, что он меня просветил. Однако стоит отметить, что одно из двух решений, которые вы хотите, зависит от того, что вы пытаетесь сделать.
Без подоболочки вы можете сделать следующее:
silent_background() {
{ 2>&3 "$@"& } 3>&2 2>-
disown &>/dev/null # Close STD{OUT,ERR} for silence if job has already completed
}
silent_background sleep 5
На основании этого ответа.