Подтвердить что ты не робот

Перенаправление вывода команды в файл и на терминал

Я пытаюсь также вывести вывод команды в файл плюс консоль. Это потому, что я хочу сохранить запись вывода в файле. Я делаю следующее и добавляю к файлу, но не печатаю ls вывод на терминал.

$ls 2>&1 > /tmp/ls.txt
4b9b3361

Ответ 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