Как мне объединить stdout и stderr для разных оболочек?

18

Я знаю ответ для некоторых оболочек, например, cmd.exeвы можете:

some.exe > out.txt 2>&1

Как добиться того же для других оболочек (bash, ksh, tcsh, powershell и т. Д.)?

Pesche
источник

Ответы:

16

Рыбная раковина

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

echo Hello > all_output.txt ^&1
Гринго Суаве
источник
3
если передается вывод следующей команды, используйте 2> | вместо этого: echo Hello 2> | меньше
Jeffrey04
Синтаксис трубопровода мог измениться. Моя оболочка рыбы использует один и тот же синтаксис «^ & 1» для обоих.
Кит Бентруп
2>&1также работает - ^это, по сути, сокращение от рыбы >2. Обратите внимание, что 2>| lessили ^| lessтолько трубы только stderr; ^&1 | less
Бени Чернявский-Паскин
Сокращения синтаксиса для перенаправления /
Бени Чернявский-Паскин
5

Для csh и tcsh

some.exec >& out.txt
KeithB
источник
для tcsh у вас также естьsome.exec |& less
кодек
2

В Powershell это точно так же:

2> & 1 Отправляет ошибки процессу get none, powershell 2> & 1
          поток вывода успеха.

about_Redirection).

По bashкрайней мере, я знаю, что так и работает.

Кажется, это общее соглашение.

Быстрый способ узнать об этом - открыть справочную страницу оболочки и выполнить поиск &1(с помощью /и затем набрать &1). Это редко происходит в других контекстах.

детеныш
источник
2

В bash вы делаете то же самое.

./some_exec > out 2>&1
Бьярке Фрейнд-Хансен
источник