csh
is significantly more limited than bash when it comes to file redirection. In csh
, you can redirect stdout
with the usual >
operator, you can redirect both stdout
and stderr
with the >&
operator, you can pipe stdout
and stderr
with the |&
operator, but there is no single operator to redirect stderr
alone.
The usual workaround is to execute the command in a sub-shell, redirecting stdout
in that sub-shell to whatever file you want (/dev/null
in this case), and then use the |&
operator to redirect stdout
and stderr
of the sub-shell to the next command in the main shell.
In your case, this means something like:
( command >/dev/null ) |& grep "^[^-]" >&/tmp/fl
Because stdout
is redirected to /dev/null
inside the sub-shell, the |&
operator will end up acting as 2>&1
in bash - since stdout
is discarded in the sub-shell, nothing written to stdout
will ever reach the pipe.