Created SC2095 (markdown)

koalaman
2015-12-07 14:23:10 -08:00
parent ac95a9929f
commit 266fdc217b

32
SC2095.md Normal file

@@ -0,0 +1,32 @@
## Add < /dev/null to prevent ssh from swallowing stdin.
The same error applies to multiple commands, like `ffmpeg` and `mplayer`.
### Problematic code:
```sh
while read -r host
do
ssh "$host" "uptime"
done < hosts.txt
```
### Correct code:
```sh
while read -r host
do
ssh "$host" "uptime" < /dev/null
done < hosts.txt
```
### Rationale:
Commands that process stdin will compete with the `read` statement for input. This is especially tricky for commands you wouldn't expect reads from stdin, like `ssh .. uptime`, `ffmpeg` and `mplayer`.
The most common symptom of this is a `while read` loop only running once, even though the input contains many lines. The is because the rest of the lines are swallowed by the offending command.
To refuse such commands input, redirect their stdin with `< /dev/null`.
### Exceptions:
None.