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


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

$ls 2>&1 > /tmp/ls.txt
3 56

3 ответа:

да, если вы перенаправите вывод, он не будет отображаться на консоли. Используйте tee.

ls 2>&1 | tee /tmp/ls.txt

стоит отметить, что 2 > &1 означает, что Стандартная ошибка также будет перенаправлена вместе со стандартным выходом. Так что

someCommand | tee someFile

дает вам только стандартный вывод в файл, но не стандартную ошибку: Стандартная ошибка отображается только в консоли. Чтобы получить стандартную ошибку в файле тоже, вы можете использовать

someCommand 2>&1 | tee someFile

(источник: в оболочке, что " 2>&1 "?). Наконец, обе вышеуказанные команды усекут файл и начнут очищать. Если вы используете последовательность команд, вы можете получить вывод и ошибку всех из них, один за другим. В этом случае вы можете использовать -флаг для команды "тройник":

someCommand 2>&1 | tee -a someFile

в случае, если кому-то нужно добавить вывод и не переопределять, можно использовать опцию "- a" или "--append" команды "tee":

ls 2>&1 | tee -a /tmp/ls.txt
ls 2>&1 | tee --append /tmp/ls.txt