SC2216 – ShellCheck Wiki

See this page on GitHub

Sitemap


Piping to rm, a command that doesn't read stdin. Wrong command or missing xargs?

Problematic code:

ls | echo                      # Want to print result
cat files | rm                 # Want to delete items from a file
find . -type f | cp dir        # Want to process 'find' output
rm file | true                 # Want to ignore errors

Correct code:

ls
cat files | while IFS= read -r file; do rm -- "$file"; done
find . -type f -exec cp {} dir \;
rm file || true

Rationale:

You are piping to one of several commands that don't read from stdin.

This may happen when:

Check your logic, and rewrite the command so data is passed correctly.

Exceptions:

If you've overridden a command to return output, you can either rename it to make this obvious, or ignore this message.


ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.