Если я запускаю команду в фоновом режиме &
, например:
sleep 2 &
когда команда заканчивается, я получаю "Готово". Как я могу избежать появления сообщения «Готово»?
Если я запускаю команду в фоновом режиме &
, например:
sleep 2 &
когда команда заканчивается, я получаю "Готово". Как я могу избежать появления сообщения «Готово»?
Ответы:
Выполнить встроенную оболочку:
$ set +m
Это работает путем отключения «режима монитора», чтобы оболочка не сообщала о прекращении фоновых заданий.
Хотя команда запускается в подоболочке вроде:
$ (sleep 2&)
... также отключит сообщение, единственная причина, по которой оно работает, это то, что режим монитора включен по умолчанию только для интерактивных оболочек. То есть подоболочка избегает сообщения, запустив дополнительную оболочку с автоматическим «set + m».
Я хотел бы уточнить два предыдущих ответа. Если вам не нужно видеть сообщение «Готово» из каких-либо команд в вашей оболочке, set +m
это путь. Просто поместите его в свой .profile и / или .bashrc и все готово. Обратите внимание, что если вы наберете это:
set +m
sleep 2 &
set -m
и сон заканчивается после финала set -m
, вы все равно получите сообщение о готовности.
Если вы хотите отключить сообщение для одиночного вызова команды, лучше использовать метод subshell (sleep 2 &)
.
Честно set +m
говоря , я только знал , так что +1 к Вублу за просветление меня. Однако стоит отметить, что то, какое из двух решений вы хотите, зависит от того, что вы пытаетесь сделать.
Без вложенной оболочки вы можете сделать следующее:
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
На основании этого ответа .
jobs
ничего не будет отображаться).