Перенаправление вывода команды в файл и на терминал
Я пытаюсь также вывести вывод команды в файл плюс консоль. Это потому, что я хочу сохранить запись вывода в файле. Я делаю следующее и добавляю к файлу, но не печатаю ls вывод на терминал.
$ls 2>&1 > /tmp/ls.txt
Ответ 1
Да, если вы перенаправляете вывод, он не появится на консоли. Используйте tee.
ls 2>&1 | tee /tmp/ls.txt
Ответ 2
Следует отметить, что 2 > & 1 означает, что стандартная ошибка также будет перенаправлена вместе со стандартным выходом. Так
someCommand | tee someFile
дает вам стандартный вывод в файле, но не стандартную ошибку: стандартная ошибка появится только в консоли. Чтобы получить стандартную ошибку в файле, вы можете использовать
someCommand 2>&1 | tee someFile
(источник: В оболочке, что такое "2 > & 1" ,). Наконец, обе приведенные выше команды будут обрезать файл и начать очистку. Если вы используете последовательность команд, вы можете захотеть получить выходную и ошибку всех из них один за другим. В этом случае вы можете использовать флаг -a для команды "tee":
someCommand 2>&1 | tee -a someFile
Ответ 3
Если кому-то нужно добавить вывод, а не переопределять, можно использовать опцию "-a" или "--append" команды "tee":
ls 2>&1 | tee -a /tmp/ls.txt
ls 2>&1 | tee --append /tmp/ls.txt