Хорошо. Если бы я хотел перенаправить вывод программы в файл, я бы сделал что-то вроде этого
prog > file
Если бы я хотел перенаправить как stdout, так и stderr в этот файл, то я бы сделал
prog > file 2>&1
Это все хорошо, если вы хотите, чтобы вывод шел в файл. Но что, если вы хотите, чтобы вывод шел в файл и все же шел в stdout / stderr? Таким образом, вывод сохраняется в файле, но вы все равно можете увидеть его на консоли во время работы программы. Есть ли способ сделать это? И если да, то как?
shell
io-redirection
Джонатан М Дэвис
источник
источник
stdout
это дескриптор файла 1 иfoo > some_file
означает, что дескриптор файла,some_file
доступный только для записи, это стандартный вывод foo. стандартный вывод всегда идет в стандартный вывод.Ответы:
tee
существует для этой цели; он принимает аргумент имени файла и записывает данные, которые он читает из стандартного ввода, как в стандартный вывод, так и в файл:источник
prog |& tee file
.prog |& tee /dev/tty > file
, что может быть полезно в середине конвейера, например,foo |& tee /dev/tty | sed 's/.*\r//' > foo.log
для просмотра обновлений о состоянии строки состояния на вашем терминале, но отфильтровывать их из файла журнала. Или используйте его для отладки конвейера, который вы взламываете вместе, позволяя вам увидеть данные в этот момент.