2

Я пишу сценарий bash и хотел бы, чтобы последняя команда запускалась как отдельный процесс. Последняя команда также отправляет весь вывод в файл. Я также, однако, хочу, чтобы вывод все еще появлялся на консоли. Что у меня есть,

$ command > "file" &

Это отправляет вывод в "файл", а также запускает команду как свой собственный процесс. Тем не менее, я также хочу просмотреть вывод в консоли одновременно (но если я нажму ctrl+c или w/e, команда не остановится). Это очень похоже на этот вопрос, но с кавиата, что он должен быть своей собственной нитью.

Я пытался:

$ command | tee "file" &

но проблема в том, что это часть процесса, а вывод на самом деле не появляется ..

Поэтому, чтобы уточнить, я хочу, чтобы command выполняла отдельный процесс, отправляя вывод в файл, но при этом вывод выводился на консоль (пока я не нажму q, введите, Ctrl + C или что-то в этом роде). Так как это в скрипте bash, две отдельные строки будут приемлемы.

1 ответ1

2

Звучит так, будто вы хотите, чтобы command закончила запись в файл, но вы хотите иметь возможность прервать отображение на консоли. Я бы взял другой подход к решению. В вашем скрипте:

> "file"
command > "file" &
tail -n +1 -F "file"

Исправление:

Исходный ответ использовал -n 0 , который изначально не выводил ни одной строки из "file" но выводил любые строки, добавленные в "file" после запуска tail . Это не было моим намерением - это была ошибка. Я намеревался использовать опцию, которая перечисляла бы все строки "file" даже если command написала несколько строк до запуска tail . Правильный вариант для этого поведения -n +1 .

С tail(1) страницы справочника:

   -n, --lines=K   output the last K lines, instead of the last 10;
                   or use -n +K to output lines starting with the Kth

Первая строка очищает содержимое файла в случае состояния гонки, когда tail попадает в файл перед command .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .