Фоновая команда может использовать стандартный вывод, когда это совершенно не к месту)
Что будет, если вы, например, отсортируете немалый файл и запросите вывод двух первых строк в фоновом режиме?
Вначале оболочка напечатает номер задания (1), идентификатор процесса (81089) и приглашение к вводу:
$ sort /usr/share/dict/words | head -n2 &
[1] 81089
$
На данном этапе происходит сортировка данных и подготовка вывода. Когда первая часть задания завершится, отработает команда "head -n2" и выведутся две строки (где бы курсор не находился):
$ sort /usr/share/dict/words | head -n2 &
[1] 81089
$A
A's
Вывод на экран при выполнении фонового задания может появиться в любое время. Ладно, если там пару строк, а вдруг данные выводятся регулярно и в большом объеме...
Совет: чтобы избежать беспорядка, перенаправьте stdout в файл, а затем просмотрите его, когда вам будет удобно:
$ sort /usr/share/dict/words | head -n2 > /tmp/results &
$ cat /tmp/results
A
A's
Неожиданности случаются и тогда, когда фоновое задание пытается читать со стандартного ввода. Оболочка приостанавливает задание, печатает сообщение Stopped и ожидает ввода. Запустив команду cat в фоновом режиме без аргументов, чтобы она читала STDIN:
$ cat &
[1] 82455
[1]+ Stopped cat
Задания не могут читать ввод в фоновом режиме, поэтому сначала переведем его на передний план с помощью fg, а затем введем данные:
$ fg
cat
Hello world!
Hello world!
После ввода можно уже либо завершить задачу "Ctrl + C", либо вернуть ее в фон через "Ctrl + Z" и bg.
LinuxCamp