18

I know the answer for some shells, e.g. with cmd.exe you can:

some.exe > out.txt 2>&1

How do you achieve the same for other shells (bash, ksh, tcsh, powershell, etc)?

16

Fish shell

To redirect both standard output and standard error to the file all_output.txt, you can write:

echo Hello > all_output.txt ^&1
  • 3
    if piping output to next command, use 2>| instead: echo Hello 2>| less – Jeffrey04 Aug 14 '14 at 10:18
  • The piping syntax may have changed. My fish shell uses the same syntax "^&1" for both. – Keith Bentrup Jan 24 '17 at 22:53
  • 2>&1 also works — ^ is essentially fish's shorthand for >2. Note that 2>| less or ^| less by itself pipes only stderr; to pipe both our and err, do ^&1 | less – Beni Cherniavsky-Paskin Apr 30 '17 at 9:09
  • Syntax shorthands for redirecting/piping both out and err are still under discussion github.com/fish-shell/fish-shell/issues/110 – Beni Cherniavsky-Paskin Apr 30 '17 at 9:17
5

For csh and tcsh

some.exec >& out.txt
  • for tcsh, you also have some.exec |& less – boatcoder Jan 27 '11 at 22:21
2

In Powershell it is exactly the same:

2>&1      Sends errors to the        get-process none, powershell 2>&1
          success output stream.

(from about_Redirection).

In bash and ksh at least I also know it works this way.

It seems to be a common convention.

A quick way to find out about it is by opening the man page of the shell and do a search for &1 (with / and then typing &1). This rarely occurs in other contexts.

2

In bash you do exactly the same.

./some_exec > out 2>&1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.