[Pkg-sysvinit-devel] Strange redirection in mountnfs.sh
    Thomas Hood 
    jdthood at yahoo.co.uk
       
    Fri Jan  6 10:14:08 UTC 2006
    
    
  
Miquel van Smoorenburg wrote:
> On Thu, 2006-01-05 at 12:20 +0100, Thomas Hood wrote:
>> In mountnfs.sh, after reading through fstab, the script does the following:
>> 
>>     exec 0>&1
>> 
>> That is, file descriptor 0 (stdin) is made a copy of file descriptor 1 (stdout)!
>> 
>> I don't understand this.  Is it a mistake?
> 
> Nope. It undoes the redirection from /etc/fstab. In normal
> circumstances, filedescriptors 0, 1 and 2 are equivalent.
Aha.
> Also 0>&1 and 0<&1 are on all Unixes I know of equivalent
OK, so the choice of one or the other is a matter of style.
> It is nessecary to undo the redirection because you don't want to start
> portmap and mount with /etc/fstab on stdin.
OK.  I have already changed the script but it still undoes the redirection,
now in the manner of checkroot.sh, before starting portmap.
> The shells I know of do not create an extra process when you use ( ).
I just conducted an experiment.  I wrote the following little script "s":
    #!/bin/bash
    : ; sleep 10
While sleep is executing there are two processes listed by "ps -A": one s process
and one sleep process.  When I change the script to this:
    #!/bin/bash
    ( : ; sleep 10 )
(i.e., add parentheses ) then "ps -A" lists _two_ s processes and one sleep process.
So in this case bash does create a new process.  However, if the script is simplified
to this:
   #!/bin/bash
   ( sleep 10 )
then there is only one s process.  So it seems that bash creates a new process for
a list, but does not do so for a simple command.
Thanks for the tips.
-- 
Thomas
    
    
More information about the Pkg-sysvinit-devel
mailing list