>& 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.txtmycommand > log.txt 2>&1The following construct is also fine, as it uses an integer file descriptor instead of a filename:
fd=3
mycommand >& $fdThere 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>&1If (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.