I am happily using constructs like the following; I have set -x to show fine distinctions.
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?
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.
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:
and it expands to
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}>&-
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:
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):
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.
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.
With gratitude to Dr. K, who has thus spared y'all from that lengthy followup,
-- Rasputin Paskudniak
These 3 Users Gave Thanks to rpaskudniak For This Post:
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)
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)
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)
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)
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)
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)
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)
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)