rpm check script problem
Steven W. Orr
steveo at syslang.net
Mon Oct 9 15:51:10 UTC 2006
On Monday, Oct 9th 2006 at 16:11 +0100, quoth Dan Track:
=>I've got a script that should check which rpms are installed on the
=>system. Part of the script involves using file descriptors. I'm having
=>trouble understanding these file descriptors and was hoping someone
=>can clarify my mistake. As a simple script I wrote the following:
=>
=>#!/bin/bash
=>$filename=$1
=>$filename1=$2
=>
=>exec 9<&0 < $filename # (1)
=>read rpm
=>echo -e "file1: "$rpm "\c"
=>
=>exec 8<&0 < $filename1 # (2)
=>read rpm1
=>echo -e "file2: "$rpm1 "\c"
=>
=>read rpm2 <&9 # (3)
=>echo -e "file1: "$rpm2 "\c"
=>
=>Now my understanding is that the last read and echo statements should
=>print out what is stored in file descriptor "9" however the script
=>just hangs on the last read. Is there a reason for this? And how do I
=>fix it? I've searched and searched but can't find any reason why this
=>shouldn't work.
=>
=>Thanks
=>Dan
You didn't tell us what you're trying to accomplish.
(1) The exec command without a program to run is used to change
redirection for the duration of the process. So what that does is to dup
channel 9 to be a copy of channel 0. i.e., if you try to read from channel
nine, you'll be reading just as if you were reading from stdin. The
problem is that order is significant. *After* you did the dup you then
said stdin should come from channel 0. If you want stdin to henceforth
come from $filename, you should have said
exec < $filename 9<&0
The next read statment is reading from channel 0 so it reads the first
line of $filename and puts it into the variable rpm.
(2) Again with the exec command. This time we dup channel 0 (which is
already copied into 9) and set the copy into channel 8. The read gives me
the first line of $filename1 and puts it into rpm1. But note that read
ends up not using a duped copy of channel 8. See (1) above.
(3) Now we see the <&9 construct which is really shorthand for 0<&9 which
dups 9 back onto 0 but only for the duration of the read.
Make sense?
--
Time flies like the wind. Fruit flies like a banana. Stranger things have .0.
happened but none stranger than this. Does your driver's license say Organ ..0
Donor?Black holes are where God divided by zero. Listen to me! We are all- 000
individuals! What if this weren't a hypothetical question?
steveo at syslang.net
More information about the fedora-list
mailing list