Variable File Descriptor


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Variable File Descriptor
# 1  
Old 12-28-2011
Power Variable File Descriptor

Greetings.

I am happily using constructs like the following; I have set -x to show fine distinctions.
Code:
$ exec 4> afile
+ exec
+ 4> afile

$ print -u4 This is the first line in afile

As you can see from the -x expansion, the shell performed the exec command and redirected file descriptor [4] to afile. And yes, the print to fd[4] works just fine.

Now what if I want to use a variable FD, as I would in C or Perl?
Code:
$ fd2=6
$ exec ${fd2}> another
+ exec 6
+ 1> another
ksh: exec: 6: not found

Not the difference: Instead of the blank exec command, it tried to execute a file named 6 and redirected stdout (fd[1]) to "another". This did create the file named "another" but it also closed the shell, as any erroneous exec would do. Smilie

So here's my question: Is there a way to open file descriptor via a variable?

By the way, back to fd[4]: Now that I have opened it, I can do this:
Code:
$ fd=4
$ print -u${fd} This is a second line in afile

and it expands to
Code:
+ print -u4 This is a second line in afile

as expected.

And, of course, whatever syntax can be used to open a FD via a variable needs to work to close it i.e. exec ${fd}>&-

Ideas, anyone?

Thanks.

-- Rasputin Paskudniak (Signature file pending..)
# 2  
Old 12-28-2011
Maybe you can give a try using the eval command so that the variable's value is substituted before the command is run
# 3  
Old 12-29-2011
Actually, cts, I had tried a syntax for using eval before I posted. I omitted it because my post was long enough. If I recall, it was something like:
Code:
$ fd=4
$ eval 'exec ${fd}> another'

I'm on a windows box right now so I can't be certain but I think the above eval command resulted in a closed shell just as surely as the naked exec command had done. So to repeat my "smiley" (if it may thus be called): Smilie

If you can come up with a variation that does NOT close the shell, it will be progress.

BTW, I just tried that variable form in a Cygwin BASH window. It also failed - could not find 4 - but at least it did not close the shell. Ah, but it also causes all stdout output to be redirected to the target file, making the shell kinda useless. This is both with and without the eval.

More ideas are SOOO welcome!

Rasputin Paskudniak
# 4  
Old 01-02-2012
MySQL Variable File Descriptor: Solved

Greetings again.

Very fortunately, I was able to bring my question to DGK himself and obtained permission to quote him. Here is his response, which answers several questions and even addresses my intended follow-up.
Quote:
The answer is that the posix standard only recognizes a digit in front of > to be taken as the file descriptor.

The reason for this is that when Steve Bourne added this feature, there were many scripts that used > without leaving a space. By restricting it to just digit, fewer scripts would break.

However, in 2005, in version ksh93r, I added the ability to put
{var}
in front of a redirection in which case, the shell would choose a file descriptor (> 10) and store the result in var.

Thus,
exec {fd}> file
print -u $fd ...
exec {fd}<& -
could be used to write to file and close it.


The } must precede the redirection operator without a space.
The really great thing about this is that it relieves me of the responsibility of finding an available file descriptor to use for my ancillary I/O; in obtaining the next available file descriptor from a pool, it behaves very much like the OPEN calls in C and Perl.

Smilie With gratitude to Dr. K, who has thus spared y'all from that lengthy followup, Smilie
-- Rasputin Paskudniak
These 3 Users Gave Thanks to rpaskudniak For This Post:
# 5  
Old 01-02-2012
Removed.

Last edited by binlib; 01-02-2012 at 11:14 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

redirecting with file descriptor

hello, Someone can help me with redirectors? I am writing this script in bash enviroment on Fedora: exec 4<> /dev/tcp/10.10.11.30/5000 #open socket in input/output strings<&4 >file.txt & I send file descriptor 4 to string command to purge data stream from special char while come from... (3 Replies)
Discussion started by: rattoeur
3 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