2

Таким образом, я выводил вывод моих программ в терминал по command 2>&1 >> /path/toFile.txt

Это создает несколько ограничений, которые я хочу преодолеть:

  1. Он "зависает" и не выводит вывод в терминале - единственный способ увидеть фактический вывод - открыть выходной файл.
  2. Открытие выходного файла не дает живых результатов. Это дает результаты от времени открытия этого файла

Как отобразить вывод в файл и уметь:

а) увидеть живые изменения в этом файле (я полагаю, что потребуется отдельная программа)

или же

б) вывести в файл и посмотреть, что выводится в терминале одновременно

2 ответа2

9

Для а) Существует утилита с именем "tail", которая показывает последние несколько строк файла и, необязательно, отслеживает файл на наличие новых строк, добавляемых в конец:

$ tail -f /path/toFile.txt

Менее пейджер также имеет возможность следить за изменениями, нажатие shift-F заставляет его войти в режим, очень похожий на tail -f, с тем преимуществом, что одно нажатие ctrl-c вернет вас в обычный режим просмотра файлов, поэтому что вы можете прокручивать файл назад или искать его, не закрывая.

Для б) Для этой цели есть стандартная утилита, называемая tee (http://www.gnu.org/software/coreutils/manual/coreutils.html#tee-invocation).

Вы, вероятно, захотите что-то вроде следующего:

command 2>&1 | tee -a /path/toFile.txt | less

| less в конце, очевидно, необязателен, но имейте в виду, что если вы включите его, закрытие less, вероятно, также закроет команду, которую вы выполняете.

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

3

Это звучит как работа для тройника. Вывод будет одновременно записан в терминал и в файл.

command 2>&1 | tee -a /path/toFile.txt

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