Команда для одновременной печати вывода на консоль и в файл в разных потоках

Команда для одновременной печати вывода на консоль и в файл в разных потоках

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

$ command > "file" &

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

Я пытался:

$ command | tee "file" &

но проблема в том, что тройник — это часть процесса, и выходной результат фактически не появляется.

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

решение1

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

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

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

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

Из tail(1)страницы руководства:

   -n, --lines=K вывести последние K строк вместо последних 10;
                   или используйте -n +K для вывода строк, начинающихся с K-го

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

Связанный контент