Help with File Descriptor in a While loop


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Help with File Descriptor in a While loop
# 1  
Old 10-17-2011
Help with File Descriptor in a While loop

Hi,

I am trying to read a file line-by-line in a while loop, and perform some tasks which involves non-interactive SSH to a remote server. The code looks something like this --

Code:
#!/usr/bin/ksh

export myFile=/path/to/my/file.load
while read line
do
do something ## Adding the SSH key for non-interactive ssh export DISPLAY=junk export SSH_ASKPASS=/home/subu/add-passphrase.ksh eval `/usr/bin/ssh-agent | tee -a /tmp/pid.$$.txt` ssh-add < /dev/null ssh remoteHost " if [[ -s someFile ]] then ftp -nv myHost << EOF > /dev/null 2>&1 user usrName pwd prompt put someFile bye EOF rm -f someFile" do something else
done < ${myFile}

The problem is after executing the 1st run of the loop perfectly, the read of the while is just not able to read from the file that I've provided as an input to it. Is it happening because of the
Code:
ssh-add < /dev/null

part or the here-doc in the ftp part? Is there an alternate way to do this?

---------- Post updated at 01:07 AM ---------- Previous update was at 01:00 AM ----------

I running this script using KSH in a Solaris box. When I run it using set -x option, the output that I get is
Code:
0< line.from.myFile
read line
.
.
.
.
read line

There is no '0< next.line.from.myFile' before the last 'read line'. This prompts me to conclude that ${myFile} is no longer attached to STDIN, and hence the read fails.
# 2  
Old 10-17-2011
The indent of your EOF in the here-doc looks wrong, but I can't really see how that could cause your symptoms.

Try taking out the "do something else" bit just so we can be sure nothing in that is causing the issue.
# 3  
Old 10-18-2011
Thanks Chubler_XL! I could finally solve the problem. The issue was not with the indent of the EOF in the here-doc, but the 'ssh-add < /dev/null'. What this did was attach /dev/null to the STDIN and spawn a child-shell as soon as the script ssh-ed to the remoteHost. To avoid this, I altered the script as below --
Code:
#!/usr/bin/ksh

export myFile=/path/to/my/file.load
while read line
do

do something

## Adding the SSH key for non-interactive ssh
export DISPLAY=junk
export SSH_ASKPASS=/home/subu/add-passphrase.ksh
eval `/usr/bin/ssh-agent | tee -a /tmp/pid.$$.txt`
ssh-add < /dev/null

runMode=1
ssh remoteHost exec /usr/bin/ksh -s ${runMode} < "/home/subu/SSHInstructions.ksh"

do something else

done < ${myFile}

The file '/home/subu/SSHInstructions.ksh' contained --

Code:
runMode=$1
if [[ ${runMode} -eq 1 && -s someFile ]]
then
ftp -nv myHost << EOF > /dev/null 2>&1
user usrName pwd
prompt
put someFile
bye
EOF
rm -f someFile

How does this help? This actually spawns a child-shell first and then attaches /dev/null to the STDIN of the child-shell, thereby leaving the STDIN of the parent shell as it was.

P.S. - the reason for lack of indentation in the SSH instructions is that it has a tendency to collapse all the indentations (tabs, blank-lines etc.) into white-spaces, leading the shell to interpret the whole thing as a single command-line.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Variable File Descriptor

Greetings. I am happily using constructs like the following; I have set -x to show fine distinctions. $ exec 4> afile + exec + 4> afile $ print -u4 This is the first line in afileAs you can see from the -x expansion, the shell performed the exec command and redirected file descriptor to... (4 Replies)
Discussion started by: rpaskudniak
4 Replies

2. Shell Programming and Scripting

file descriptor count

I am trying to write a script which will only show me the file descriptor count for a process/pid. My script will return me the count only not the whole output. For example, I would like my script to return the output 23 this case, not the whole output. Can anybody please help me how do I get... (11 Replies)
Discussion started by: mohullah
11 Replies

3. Shell Programming and Scripting

file descriptor KSH

Hello, How can i use file descriptor in a script to read 2 files at the same time and extract line 200 from file 1 and line 500 from file 2. Thanks. (6 Replies)
Discussion started by: LiorAmitai
6 Replies

4. UNIX for Dummies Questions & Answers

File Descriptor

Hi What the below path contains? /proc/<pid>/fd (1 Reply)
Discussion started by: siba.s.nayak
1 Replies

5. Shell Programming and Scripting

File Descriptor

Hello All, Im opening a file desciptor in perl and sending data using print CMD "$xyz". is there a limit to the length of the string that I can give to this CMD at a time. (3 Replies)
Discussion started by: rimser9
3 Replies

6. Shell Programming and Scripting

Passing a file descriptor

I am trying to right a function which uses a file descriptor to write to a log file. The problem is that the on the print statement the file descriptor is called bad. Now when I first open the file and print to it in the f_open function by passing the descriptor to f_print_log all works well,... (6 Replies)
Discussion started by: robotball
6 Replies

7. UNIX for Advanced & Expert Users

File Descriptor Table

Im working on writing a small operating system. I am currently working on implementing dup, dup2, pipe, and close and I need to implement some type of file descriptor table in my PCB. I was wondering if there is anyone who is familiar with linux/unix implementation of these tables who could... (6 Replies)
Discussion started by: Ashaman0
6 Replies

8. Programming

File descriptor constant

I have a requirement to close all the file descriptors from 3 to 1024 for a particular application. Right now, this is how I do it .. for ( int i = 3 ; i <= 1024; ++i ) close(i); The change I am looking at is, I want to do away with the number 1024 and replace it with a constant which... (4 Replies)
Discussion started by: vino
4 Replies

9. UNIX for Dummies Questions & Answers

File Descriptor Help

What is a file descriptor in Unix?? How to find a file descriptor of a file in Unix?? Does it have anything to do with the Inode numbers?? (3 Replies)
Discussion started by: rahulrathod
3 Replies

10. UNIX for Dummies Questions & Answers

file activity (open/closed) file descriptor info using KORN shell scripting

I am trying to find a way to check the current status of a file. Such as some cron job processes are dependent on the completion of others. if a file is currently being accessed / modified or simply open state I will wait until it is done being processed before attempting the next process on that... (3 Replies)
Discussion started by: Gary Dunn
3 Replies
Login or Register to Ask a Question