mirror of
https://github.com/koalaman/shellcheck.git
synced 2025-10-03 19:29:44 +08:00
Created SC2188 (markdown)
33
SC2188.md
Normal file
33
SC2188.md
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
## This redirection doesn't have a command. Move to its command (or use 'true' as no-op).
|
||||||
|
|
||||||
|
### Problematic code:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
{
|
||||||
|
echo "Report for $(date +%F)"
|
||||||
|
uptime
|
||||||
|
df -h
|
||||||
|
}
|
||||||
|
> report.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### Correct code:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
{
|
||||||
|
echo "Report for $(date +%F)"
|
||||||
|
uptime
|
||||||
|
df -h
|
||||||
|
} > report.txt
|
||||||
|
```
|
||||||
|
### Rationale:
|
||||||
|
|
||||||
|
ShellCheck found a redirection that doesn't actually redirect from/to anything.
|
||||||
|
|
||||||
|
This could indicate a bug, such as in the problematic code where an additional linefeed causes `report.txt` to be truncated instead of containing report output, or in `foo & > bar`, where either `foo &> bar` or `foo > bar &` was intended.
|
||||||
|
|
||||||
|
However, it could also be intentionally used to truncate a file or check that it's readable. You can make this more explicit for both ShellCheck and human readers by using `true` or `:` as a dummy command, e.g. `true > file` or `: > file`.
|
||||||
|
|
||||||
|
### Exceptions:
|
||||||
|
|
||||||
|
There are no semantic problems with using `> foo` over `true > foo`, so if you don't see this as a potential source of bugs or confusion, you can [[ignore]] it.
|
Reference in New Issue
Block a user