Перенаправлення виводу команди здається неактуальним, оскільки повідомлення надсилається оболонкою, коли завдання запускається асинхронно. Точніше, це особливість оболонки (функціональність), пов'язана з контролем роботи .
Ось цитата, що надходить із "Довідкового керівництва Bash", розділу "Контроль роботи", перший розділ.
Оболонка асоціює РОБОТУ з кожним трубопроводом. Він зберігає таблицю поточних виконуваних завдань, яка може бути вказана разом з jobs
командою. Коли Bash починає роботу асинхронно, він друкує рядок, який виглядає так:
[1] 25647
що вказує на те, що це завдання є завданням № 1 і що ідентифікатор процесу останнього процесу в конвеєрі, пов'язаному з цим завданням, становить 25647. Усі процеси в одному трубопроводі є членами одного завдання. Bash використовує абстракцію JOB як основу для контролю за роботою.
Зауважте, що сценарій оболонки не відображає це сповіщення.
$ cat test
#!/bin/bash
true & echo true
$ ./test
true
У фактах
Зш
Документація Zsh містить подібні вказівки щодо цих повідомлень, див. man 1 zshmisc
Розділ "РОБОТИ". Ці сповіщення не відображаються, коли контроль роботи відключений.
МОНІТОР ( -м , кш: -м )
Дозволити контроль роботи. Встановити за замовчуванням в інтерактивній оболонці.
zsh_prompt % setopt no_monitor
zsh_prompt % true & echo true
true
zsh_prompt %
zsh_prompt %
Баш
Здається, що Bash завжди відображає напр [1] 25647
. Наприклад, "остаточне повідомлення" [1]+ Done true
не відображається, коли контроль роботи відключений.
bash_prompt $ true & echo true
[1] 25647
true
bash_prompt $
[1]+ Done true
Управління роботою вимкнено
bash_prompt $ set +m # disable job control
bash_prompt $ true & echo true
[1] 25685
bash_prompt $
bash_prompt $
Висновок
Я не знаю, чи добре відключити контроль роботи, щоб приховати сповіщення?
Ресурси