SC3021 – ShellCheck Wiki

See this page on GitHub

Sitemap


In POSIX sh, >& 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.

Problematic code:

# Writing to a filename
mycommand >& log.txt

Correct code:

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

Rationale:

There are two forms of the >& file descriptor operator:

If (and only if) you are using the latter form, write it out as shown in the correct example to ensure portability.

Exceptions:

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.