I often see questions which are essentially the same as...
while
loop only iterates once when I call ssh
in the body of the loop.
while read -r line; do
ssh somehost "command $line"
done < argument_list.txt
ssh
also reads from standard input, so the first call to ssh
consumes the rest of argument_list.txt
before the next call to read
. To fix, either redirect ssh
's standard input from /dev/null
using either
ssh somehost "command $line" < /dev/stdin
or
ssh -n somehost "command $line"
In the event that ssh
really does need to read from standard input, you don't want it reading more data from argument_list.txt
. In this case, you need to use a different file descriptor for the while loop.
while read -r line <&3; do
ssh somehost "command $line"
done 3< argument_list.txt
bash
and some other shells also allow read
to take a -u
option to specify the file descriptor, which some might find more readable.
while read -r -u 3 line; do
ssh somehost "command $line"
done 3< argument_list.txt
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With