Path: csiph.com!xmission!news.snarked.org!news.linkpendium.com!news.linkpendium.com!panix!usenet.stanford.edu!not-for-mail From: Kamil Cukrowski Newsgroups: gnu.bash.bug Subject: cat inside >() inside tee after flock gets stuck Date: Sat, 7 Sep 2019 01:15:40 +0200 Lines: 79 Approved: bug-bash@gnu.org Message-ID: References: NNTP-Posting-Host: lists.gnu.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Trace: usenet.stanford.edu 1567820467 20637 209.51.188.17 (7 Sep 2019 01:41:07 GMT) X-Complaints-To: action@cs.stanford.edu To: bug-bash@gnu.org Envelope-to: bug-bash@gnu.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=to:from:subject:message-id:date:user-agent:mime-version :content-transfer-encoding:content-language; bh=9t8uXFzyKE5Q07qaLZvLBROvMy6V1b/hQizZtQ3yv8Y=; b=QuXxPlVj24yIVH5tzRHweOZkJY3RqHTfmMI+NknmN8nzNpbBJD3TOw4lTYIJ152uMO Y9Bz3s7RshcF7VS37IiUyNDIQZJNVQWvU5eivvKlwo45Ycs1sbhsuXOtYizJHmT7GAqw aL0878Xw3Kf0eBAHXpjw8PiQ8nOwGRQaJH2WywmPNJAIum1pYW/2NfegrV+MDzPpAYO6 Xy8jc7QLlXONzE3j4i0okkouBbRPQywexxYtln3fphZjyxzLK69qjlMITwqtrKV91T5E p0HXACYz15r6YqUBXPDitVLpPN8oPWzpDRTwXxyaU+2+Q733ONJZKdOjcuv77nczDR01 LtHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version:content-transfer-encoding:content-language; bh=9t8uXFzyKE5Q07qaLZvLBROvMy6V1b/hQizZtQ3yv8Y=; b=lVoybVZGw78M5bGJAEW8r8Z0PAPh0Sf09R93/Wzxw5N06hku37hc9ODQcZ8a+zKomF uYur8G1NGFLpalPMXZWBxueQ0xpNXZ5pvDlbXrosugWoCNGTwwTkL6thDkQrT2wFfdE/ oM7ZgT30rFOX/eCjErpb2enfbGJdsd/8Q8aRAxxVCMzr6F9pDK+VxEz6VtPhhKSnLZAi lfvyG3PZVtMyDFALBJs6VkGPxvRDjT7tv1CGYWexontjFIlAnRHHq7bBrU/cJ/6uSa+3 7MzVDU2kbUOpS2DV++DqW/lnWH6DynlbxZbmfbNFVqLqWoywdyRwvjIo+HC8RU38NO70 ql7w== X-Gm-Message-State: APjAAAWG98KobnH+Asb2NzozJjacAd2p3g3mjpGkvrAahThnxWzB663C YFFC4Mx6Xyi4bwVgmVGB0UFHeBFZ X-Google-Smtp-Source: APXvYqwfaPzu+DSIC3tsOlS8YuAPzwffSnMLKxYfxRjm+FUNbFAUrStiw6OH6GFZx7vA/TnHNVC8Qg== X-Received: by 2002:a2e:3a01:: with SMTP id h1mr7431592lja.171.1567811742083; Fri, 06 Sep 2019 16:15:42 -0700 (PDT) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.0 Content-Language: en-US X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::22e X-Mailman-Approved-At: Fri, 06 Sep 2019 21:41:04 -0400 X-BeenThere: bug-bash@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Bug reports for the GNU Bourne Again SHell List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Original-Message-ID: Xref: csiph.com gnu.bash.bug:15351 Configuration Information [Automatically generated, do not change]: Machine: x86_64 OS: linux-gnu Compiler: gcc Compilation CFLAGS: -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -DDEFAULT_PATH_VALUE='/usr/local/sbin:/usr/local/bin:/usr/bin' -DSTANDARD_UTILS_PATH='/usr/bin' -DSYS_BASHRC='/etc/bash.bashrc' -DSYS_BASH_LOGOUT='/etc/bash.bash_logout' -DNON_INTERACTIVE_LOGIN_SHELLS -Wno-parentheses -Wno-format-security uname output: Linux leonidas 5.2.11-arch1-1-ARCH #1 SMP PREEMPT Thu Aug 29 08:09:36 UTC 2019 x86_64 GNU/Linux Machine Type: x86_64-pc-linux-gnu Bash Version: 5.0 Patch Level: 9 Release Status: release Description:     I have the following script to synchronize execution of a command substitution using flock:         touch /tmp/1         echo |         (             flock 13             tee >(                cat                flock -u 13             ) >/dev/null             (                flock 13             ) 13(cat; echo "all ok"; flock -u 13) >/dev/null; ( flock 13 ) 13(cat ...)` gets stuck. The `echo "all ok"` is never executed. The `timeout 1` fires and `not ok` is printed out. I have also tried `docker run bash:5.0` and various servers I can access - `not ok` is printed out on bash v5.     I can also replicate the behavior on `docker run bash:5.0`     The issue was first reported by @LEo on stackoverflow thread: https://stackoverflow.com/questions/57813225/how-to-assign-output-of-multiple-shell-commmands-to-variable-when-using-tee/57813297?noredirect=1#comment102083293_57813297      I tried inspecting both `tee` and `cat` under `strace`. Well, `tee` does `close(3)` , where 3 is it's file descriptor to command redirection. And `cat` just blocks on `read()` call. The empty line from `echo |` is printed out by `cat`, you can put something in there, for sure it reads from proper stream. bash<4 closed the stream properly, bash5.0 seems like doesn't do that and the stream is still open and `cat` blocks on `read()` call. Repeat-By:      Simply execute:          timeout 1 bash -x -c 'touch /tmp/1; echo | ( flock 13; tee >(cat; echo "all ok"; flock -u 13) >/dev/null; ( flock 13 ) 13