Другое простое решение для устранения странного форматирования, вызванного Excel, состоит в том, чтобы скопировать и вставить данные в электронную таблицу Google, а затем загрузить их в формате CSV.
С технической точки зрения он дублирует или копирует stderr на стандартный вывод.
Обычно для этого не нужен exec. Более типичное использование exec с файловыми дескрипторами состоит в том, чтобы указать, что вы хотите назначить файл неиспользуемому файловому дескриптору, например
exec 35< my_input
BTW. Не забывайте, что последовательность объявления при передаче файла по конвейеру важна, поэтому
ls > mydirlist 2>&1
будет работать, потому что он направляет и stdout, и stderr в файл mydirlist, тогда как команда
ls 2>&1 > mydirlist
направляет только stdout, а не stderr, в файл mydirlist, потому что stderr был сделан копией stdout до того, как stdout был перенаправлен на mydirlist.
] Редактировать: Оболочка работает таким образом, сканирование слева направо. Так что прочтите второй, говоря «скопируйте stderr на stdout», прежде чем он скажет «отправить stdout в mydirlist». Затем прочтите в первом сообщении «отправить stdout в файл mydirlist» перед тем, как будет сказано «дублировать stderr на тот стандартный вывод, который я настроил». Я знаю. Это совершенно не интуитивно!
Как сказал @cma, он помещает stderr в стандартный вывод. Причина, по которой вам может потребоваться такое поведение, заключается в использовании grep или любой другой утилиты для захвата вывода, который появляется только в stderr. Или вы можете просто сохранить весь вывод, включая stderr, в файл для последующей обработки.
Он связывает стандартную ошибку со стандартным выходом
, 2
- это стандартный поток, а 1
- стандартный вывод. Когда вы запускаете программу, вы получаете нормальный вывод в stdout, но все ошибки или предупреждения обычно отправляются в stderr. Если вы хотите направить весь вывод, например, в файл, полезно сначала объединить stderr с stdout с 2> & 1
.