bug-bash
[Top][All Lists]
Advanced

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

Re: Possible bug with BASH V4: The "$!"


From: Dan Douglas
Subject: Re: Possible bug with BASH V4: The "$!"
Date: Thu, 11 Apr 2013 12:17:30 -0500
User-agent: KMail/4.8.3 (Linux/3.4.6-pf+; KDE/4.8.3; x86_64; ; )

On Thursday, April 11, 2013 04:15:45 PM Lenga, Yair wrote:
> ( echo "$!") &
> ( echo "$!") &
> 
> According to POSIX, both calls should print "" (nothing). As the background
> command does not come from the "current" shell.
> 
> With BASH4, The first call will print "" (nothing), second call will print
> the PID of the first call.
> 
> This is very confusing, and probably conflict with POSIX standard which
> indicate that "$!" apply to "CURRENT" shell.

The backgrounding of each list member is sequential. Presumably $! should be
set immediately after each fork and inherited by subshells like most other
variables. See "Command Execution Environment" in the manual or POSIX.

`x &', `{ x; } &' and, `(x) &' -- where `x' is a simple command are all
identical. The subshell group () is redundant in your example.

Note the wait doesn't impact these results. It just forces the output to be
ordered.

        $!/usr/bin/env bash
        for sh in {{b,d}a,z,{m,}k,po}sh bb sh; do
                printf %-6s "${sh}:"
                "$sh" /dev/fd/0
                echo
        done <<\EOF
        ${ZSH_VERSION+false} || emulate sh
        n=5
        while [ $((n -= 1)) -ge 0 ]; do
                printf "%s " "${!:-empty}" & wait
        done
        EOF

bash: empty 2787 2788 2789 2790
dash: empty 2793 2794 2795 2796
zsh:  0 2800 2801 2802 2803
mksh: empty 2807 2809 2810 2811
ksh:  empty 2814 2815 2816 2817
posh: empty 2820 2821 2822 2823
bb:   empty 2826 2827 2828 2829 # busybox
sh:   empty 2832 2833 2834 2835 # bash POSIX mode

-- 
Dan Douglas



reply via email to

[Prev in Thread] Current Thread [Next in Thread]