Created SC2094 (markdown)

koalaman
2014-01-27 23:18:56 -08:00
parent 6087fd6e2f
commit 08bd914ed5

24
SC2094.md Normal file

@@ -0,0 +1,24 @@
# SC2094 Make sure not to read and write the same file in the same pipeline.
### Problematic code:
grep foo file.txt | sed -e 's/foo/bar/g' > file.txt
### Correct code:
grep foo file.txt | sed -e 's/foo/bar/g' > tmpfile && mv tmpfile file.txt
### Rationale:
Each step in a pipeline runs in parallel.
In this case, `grep foo file.txt` will immediately try to read `file.txt` while `sed .. > file.txt` will immediately try to truncate it.
This is a race condition, and results in the file being partially or (far more likely) entirely truncated.
### Contraindications
You can ignore this error if:
* The file is a device or named pipe. These files don't truncate in the same way.
* The command mentions the filename but doesn't read/write it, such as `echo log.txt > log.txt`.