Запобігання показу bash "Готово", коли команда background закінчує виконання


34

Якщо я запускаю команду у фоновому режимі з &, як це:

sleep 2 &

коли команда закінчується, я отримую "Готово". Як я можу уникнути перегляду повідомлення "Готово"?

Відповіді:


34

Запустіть команду в нижній частині:

(sleep 2 &)

зауважте, що використовуючи це, ви втрачаєте контроль над роботами всередині оболонки абонента ( jobsнічого не покаже).
mighq

35

Виконайте вбудовану оболонку:

$ set +m

Це працює, вимикаючи "режим монітора", так що оболонка не повідомляє про закінчення фонових завдань.

Хоча команда працює в нижній частині, наприклад:

$ (sleep 2&)

... також буде відключено повідомлення, і єдиною причиною його роботи є те, що режим монітора за замовчуванням увімкнено лише для інтерактивних оболонок. Тобто, додаткова оболонка уникає повідомлення, запустивши додаткову оболонку, яка має автоматичне "встановити + m".


4
Слід зазначити, що цей вихід не виконується сном. Це bash shell, який просто інформує вас про готову фонову роботу.
flolo

8

Я хотів би уточнити дві попередні відповіді. Якщо ви хочете ніколи не бачити повідомлення Готово з будь-яких команд у вашій оболонці, set +mце шлях. Просто помістіть його у свій .profile та / або .bashrc, і буде зроблено. Зауважте, що якщо ви введете це:

set +m
sleep 2 &
set -m

і після закінчення сну закінчується set -m, ви все одно отримаєте готове повідомлення.

Якщо ви хочете вимкнути повідомлення для виклику однієї команди, (sleep 2 &)спосіб підключення підключення - це шлях.

Чесно set +mкажучи , я лише про це знав , тому +1 до Wooble за те, що мене просвітило. Однак варто зауважити, що від двох потрібних рішень залежить від того, що ви намагаєтеся зробити.


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.