>& filename
(as opposed to
>& fd
) is undefined.Note: ShellCheck 0.8.0 and below would trigger this warning on the
perfectly POSIX compatible construct >& fd
. If you
are using >&
to copy an integer file descriptor,
please ignore this warning.
# Writing to a filename
mycommand >& log.txt
mycommand > log.txt 2>&1
The following construct is also fine, as it uses an integer file descriptor instead of a filename:
fd=3
mycommand >& $fd
There are two forms of the >&
file descriptor
operator:
>& integer
such as >& 3
is a
POSIX compatible synonym for 1>&3
>& filename
such as
>& log.txt
is a Bash specific synonym for
> log.txt 2>&1
If (and only if) you are using the latter form, write it out as shown in the correct example to ensure portability.
ShellCheck 0.8.0 and below incorrectly emits this warning for
constructs like >& $var
, even though this would be
POSIX compatible when $var
is an integer. In such cases,
please ignore this warning.
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.