tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Redoing the code in /bin/sh to handle the issues in PR bin/48875



On 08/17, Robert Elz wrote:
> I'd appreciate any suggestions for improvements, particularly ways
> to convey the information included in a more succinct form.
> 
> This is the (new) text I currently have ...
> 
>      Note that if a command substitution includes commands to be run in the
>      background, the sub-shell running those commands will only wait for them
>      to complete if an appropriate wait command is included in the command
>      list.  However, the shell in which the result of the command substitution
>      will be used is waiting for both the sub-shell to exit, and for the file
>      descriptor that was initially standard output for the command
>      substitution sub-shell to be closed.

Hi, Robert!

I think this sentence would read better if it used the same verb tense
as the preceding sentence.  In this sentence, I think the verb tense
of "is waiting" is present-continuous, but in the preceding sentence,
I think the verb tense of "will wait" is simple-future.  So, I would
slightly reword this sentence to instead use the simple-future verb
tense (along with removing the comma after "exit") as follows:

  However, the shell in which the result of the command substitution
  will be used will wait for both the sub-shell to exit and for the
  file descriptor that was initially standard output for the command
  substitution sub-shell to be closed.

>                                            While the exit of the sub-shell
>      closes its standard output, any background process left running may still
>      have that file descriptor open.  This includes yet another sub-shell
>      which might have been (almost invisibly) created to wait for some other
>      command to complete, and even where that other command has had its
>      standard output redirected or closed, the waiting sub-shell may still
>      have it open.  Thus there is no guarantee that the result of a command
>      substitution will be available in the shell which is to use it before all
>      of the commands started by the command substitution have completed,
>      though careful coding can often avoid delays beyond the termination of
>      the command substitution sub-shell.

I suggest including an example somewhere in the paragraph since it
won't be read in the context of the PR.  The example could even be the
one from the PR.  When I first read this, I didn't even know a command
inside a "$()" could be terminated with an "&" to cause it to execute in
the background in a sub-shell.  So, an example would help someone like
me understand what this paragraph is talking about.

Lastly, I'm wondering if it would be helpful to include a statement on
best-practice or a good idiom here.  To me, a command substitution that
runs in the background seems weird and like something to avoid.  Is
there really a case where this is useful, or would it be reasonable to
include a suggestion that it's best to avoid such a construct?  Or if
there is a case where this is useful, is this the best way to do it,
and if not, what's a better way to do it?  I'm thinking of something
like the Caveats section of the printf(3) man page where it suggests the
proper secure idiom for avoiding a format string vulnerability.  But
this is not a suggestion I'm confident about; I'm more just wondering
about it.  If it doesn't sound good, then forget it.

Regards,

Lewis


Home | Main Index | Thread Index | Old Index