mirror of
https://github.com/koalaman/shellcheck.git
synced 2025-03-12 12:35:25 -07:00
Created SC2227 (markdown)
parent
ad0d357d3b
commit
06fa07f854
41
SC2227.md
Normal file
41
SC2227.md
Normal file
@ -0,0 +1,41 @@
|
||||
## Redirection applies to the find command itself. Rewrite to work per action (or move to end).
|
||||
|
||||
### Problematic code:
|
||||
|
||||
```sh
|
||||
find . -name '*.ppm' -exec pnmtopng {} > {}.png \;
|
||||
```
|
||||
|
||||
### Correct code:
|
||||
|
||||
```sh
|
||||
find . -name '*.ppm' -exec sh -c 'pnmtopng "$1" > "$1.png"' _ {} \;
|
||||
```
|
||||
### Rationale:
|
||||
|
||||
ShellCheck detected a `find` command with a redirection in the middle.
|
||||
|
||||
This redirection may have been intended to apply only to a specific action like `-exec` or `-print`, but it does in fact apply to the entire `find` command:
|
||||
|
||||
# This command
|
||||
find . -name '*.ppm' -exec pnmtopng {} > {}.png \;
|
||||
|
||||
# Is the same as this
|
||||
{
|
||||
find . -name '*.ppm' -exec pnmtopng {} \;
|
||||
} > {}.png
|
||||
|
||||
To perform a redirection per action, rewrite it with e.g. `-exec sh -c '...' _ {} \;`
|
||||
|
||||
If the redirection is something like `> /dev/null` where you don't mind it applying to the whole `find` and not individual results, move the redirection to the end of command:
|
||||
|
||||
find . -exec foo {} > /dev/null \; # Ambiguous syntax. Is it per -exec or not?
|
||||
find . -exec foo {} \; > /dev/null # Identical command with clear intent.
|
||||
|
||||
### Exceptions:
|
||||
|
||||
None
|
||||
|
||||
### Related resources:
|
||||
|
||||
* Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!
|
Loading…
x
Reference in New Issue
Block a user