Когда вы перенаправляете вывод, байты записываются в место назначения без обработки. Как вы себе представляете, например, последовательности ANSI для манипулирования цветом могут быть «обработаны» при перенаправлении? То же самое с ЧР. Это просто написано для вывода.
Приложения могут обнаружить, что они не подключены к реальному tty устройству, и выбрать другой режим, «обрабатывая» коды внутри. Возможно, приложения ncurses делают это, но я считаю, что это вежливость.
С другой стороны, когда вы catили typeэтот захваченный файл, необработанные коды будут обрабатываться устройством tty.
Ну, я думаю, что было бы вполне приемлемо, чтобы обработка выполнялась в перенаправлении, например, просто отбрасывая цветовые коды (и правильно обрабатывая CR)
Synxis 8 лет назад
0
Ну, как вы себе это представляете, когда перенаправляете вывод на устройство, обеспечивающее только последовательный доступ (напишите в нашем случае)? Тип пишущие или CD-R, DVD-R пишущие являются примером. Приложение не знает, что будет дальше, оно не может предсказать, когда появится CR без LF. Итак, вы ожидаете увидеть в каждом приложении, которое вы когда-либо запускаете, возможность кешировать вывод? А как насчет строк, содержащих килобайты и мегабайты, которые идеально подходят для скриптов xml / json /? Это будет любезно предоставлено некоторыми приложениями без какой-либо гарантии ... p
Maximus 8 лет назад
0
Оболочка может независимо буферизовать последнюю неопределенную строку для такого случая, но у вас есть точка с огромными строками xml / json. Может быть, должен быть вариант для этого ...
Synxis 8 лет назад
0
-1
BillThor
Возврат каретки должен вернуть курсор к левому полю. Это основная функциональность. Предполагается, что перевод строки перемещает курсор вниз на одну строку. Некоторые программные / аппаратные средства выполняют только основные функции. Однако другие программные / аппаратные средства обрабатывают возврат каретки и / или перевод строки без строки как пару возврат каретки / перевод строки. То, что вы видите, - это вариации этого поведения.
Различные операционные системы и другое программное обеспечение используют в качестве ограничителя строки либо возврат каретки, либо перевод строки. Они обычно отрисовывают терминатор строки, продвигаясь к началу следующей строки. Поведение требует, чтобы консоль вставляла возврат каретки при отправке перевода строки. Попробуйте запустить вашу программу после отключения этого поведения с помощью команды stty -onlcr. Это может быть отменено с помощью команды stty onlcrили stty sane.
Вывод оператора print не обрабатывается и дает правильный вывод на консоли. Если вы использовали другой терминал, вы можете получить те же результаты, что и при его обработке во время передачи.