bash.lang.best-practice.useless-cat.useless-cat

profile photo of semgrepsemgrep
Author
unknown
Download Count*

Useless call to 'cat' in a pipeline. Use '<' and '>' for any command to read from a file or write to a file.

Run Locally

Run in CI

Defintion

rules:
  - id: useless-cat
    pattern-either:
      - pattern: |
          cat | ...
      - patterns:
          - pattern: |
              cat $ARG | ...
          - pattern-not: |
              cat ${$SEVERAL_FILES} | ...
      - pattern: |
          ... | cat
      - pattern: |
          ... | cat | ...
    message: Useless call to 'cat' in a pipeline. Use '<' and '>' for any command to
      read from a file or write to a file.
    metadata:
      references:
        - https://github.com/koalaman/shellcheck/wiki/SC2002
      category: best-practice
      technology:
        - bash
      license: Commons Clause License Condition v1.0[LGPL-2.1-only]
    severity: WARNING
    languages:
      - bash

Examples

useless-cat.bash

# ok:useless-cat
a b

# ruleid:useless-cat
cat | a b

# ruleid:useless-cat
cat | a b | c d

# ok:useless-cat
cat file1 file2 | a b

# ok:useless-cat
cat $files | a b

# ruleid:useless-cat
cat file | a b

# ruleid:useless-cat
cat "$file" | a b

# ruleid:useless-cat
a b | cat > file

# ruleid:useless-cat
a b | c d | cat > file

# ruleid:useless-cat
a b | cat | c d

# ruleid:useless-cat
a b | c d | cat | e f | g h

# ruleid:useless-cat
while true; do
  a b
done | cat

# ruleid:useless-cat
cat | while true; do
  a b
done