For example:
cat myFile.txt | while read LINE; do echo $LINE sleep 1 done
Now comes along SSH and lets say that your file contains a list hostnames you want to get uptime from:
cat myHostsFile.txt | while read LINE; do echo -n "Host = $LINE " ssh $LINE "updtime" done
How disappointed you are when your loops stops after the first host. This is because every child process inherits it's first three file descriptors from it's parent, so SSH takes everything from STDIN for itself.
Sometimes you may want that but this time you don't. What can you do?
The simple solution here is to disassociate SSH from STDIN, and you do this using a simple re-director.
cat myHostsFile.txt | while read LINE; do echo -n "Host = $LINE " ssh 0>/dev/zero $LINE "updtime" done
Something to keep in mind is that STDIN supplies a data stream, it does not take it. So for this reason we attache to /dev/zero not /dev/null.
No comments:
Post a Comment