Предотвращение отображения bash «Готово», когда завершается выполнение фоновой команды


34

Если я запускаю команду в фоновом режиме &, например:

sleep 2 &

когда команда заканчивается, я получаю "Готово". Как я могу избежать появления сообщения «Готово»?

Ответы:


34

Запустите команду в подоболочке:

(sleep 2 &)

обратите внимание, что при использовании этого вы теряете контроль над заданиями внутри оболочки вызывающего абонента ( jobsничего не будет отображаться).
Mighq

36

Выполнить встроенную оболочку:

$ set +m

Это работает путем отключения «режима монитора», чтобы оболочка не сообщала о прекращении фоновых заданий.

Хотя команда запускается в подоболочке вроде:

$ (sleep 2&)

... также отключит сообщение, единственная причина, по которой оно работает, это то, что режим монитора включен по умолчанию только для интерактивных оболочек. То есть подоболочка избегает сообщения, запустив дополнительную оболочку с автоматическим «set + m».


4
Следует отметить, что этот вывод не выполняется сном. Это оболочка bash, которая просто сообщает вам о готовой фоновой работе.
flolo

8

Я хотел бы уточнить два предыдущих ответа. Если вам не нужно видеть сообщение «Готово» из каких-либо команд в вашей оболочке, set +mэто путь. Просто поместите его в свой .profile и / или .bashrc и все готово. Обратите внимание, что если вы наберете это:

set +m
sleep 2 &
set -m

и сон заканчивается после финала set -m, вы все равно получите сообщение о готовности.

Если вы хотите отключить сообщение для одиночного вызова команды, лучше использовать метод subshell (sleep 2 &).

Честно set +mговоря , я только знал , так что +1 к Вублу за просветление меня. Однако стоит отметить, что то, какое из двух решений вы хотите, зависит от того, что вы пытаетесь сделать.


0

Без вложенной оболочки вы можете сделать следующее:

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

На основании этого ответа .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.