AKS
AKS

Reputation: 17326

WHILE loop - read line of a file one by one -- Not working the No. of times the file has lines in it

I'm using a "while" loop within a shell script (BASH) to read line of a file (one by one) -- "Fortunately", its not working the No. of times the file has lines in it.

Here's the summary: $ cat inputfile.txt

1
2
3
4
5

Now, the shell script content is pretty simple as shown below:

#!/bin/bash

while read line 
do
 echo $line ----------; 
done < inputfile.txt;

The above script code works just fine..... :). It shows all the 5 lines from inputfile.txt.



Now, I have another script whose code is like:

#!/bin/bash

while read line 
do
 echo $line ----------;

 somevariable="$(ssh sshuser@sshserver "hostname")";
 echo $somevariable;
 
done < inputfile.txt;

Now, in this script, while loop just shows only line "1 ---------" and exits out from the loop after showing valid value for "$somevariable"

Any idea, what I'm missing here. I didn't try using some number N < inputfile.txt and using done <&N way (i.e. to change the input redirector by using a file pointed by N descriptor) .... but I'm curious why this simple script is not working for N no. of times, when I just added a simple variable declaration which is doing a "ssh" operation in a child shell.

Thanks.

Upvotes: 0

Views: 45931

Answers (1)

jlliagre
jlliagre

Reputation: 30823

You might want to add the -n option to the ssh command. This would prevent it to "swallow" your inputfile.txt as its standard input.

Alternatively, you might just redirect ssh stdin from /dev/null, eg:

somevariable="$(ssh sshuser@sshserver "hostname" </dev/null)";

Upvotes: 4

Related Questions