команда sh: должностное лицо 2> &1

Другое простое решение для устранения странного форматирования, вызванного Excel, состоит в том, чтобы скопировать и вставить данные в электронную таблицу Google, а затем загрузить их в формате CSV.

48
задан R. Martinho Fernandes 1 August 2009 в 16:31
поделиться

3 ответа

С технической точки зрения он дублирует или копирует 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 на тот стандартный вывод, который я настроил». Я знаю. Это совершенно не интуитивно!

37
ответ дан 26 November 2019 в 18:48
поделиться

Как сказал @cma, он помещает stderr в стандартный вывод. Причина, по которой вам может потребоваться такое поведение, заключается в использовании grep или любой другой утилиты для захвата вывода, который появляется только в stderr. Или вы можете просто сохранить весь вывод, включая stderr, в файл для последующей обработки.

3
ответ дан 26 November 2019 в 18:48
поделиться

Он связывает стандартную ошибку со стандартным выходом

, 2 - это стандартный поток, а 1 - стандартный вывод. Когда вы запускаете программу, вы получаете нормальный вывод в stdout, но все ошибки или предупреждения обычно отправляются в stderr. Если вы хотите направить весь вывод, например, в файл, полезно сначала объединить stderr с stdout с 2> & 1 .

14
ответ дан 26 November 2019 в 18:48
поделиться