delorie.com/archives/browse.cgi | search |
X-Recipient: | archive-cygwin AT delorie DOT com |
DomainKey-Signature: | a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id |
:list-unsubscribe:list-subscribe:list-archive:list-post | |
:list-help:sender:to:from:subject:message-id:date:mime-version | |
:content-type:content-transfer-encoding; q=dns; s=default; b=jvj | |
ZV/pJQdOoO2IXm4IcnncxFBEK5FQ2jVNPgE48gdZ1kjyeqcbp3IPbs1TRN7sxWed | |
fIDS5QwAQklmJk1W0gmsazdhg2PxGqcfVo7lj/IUNQsX/efGOulmtjFU3zPRf/Ux | |
Kj2+FeiHDtjslYQZprPfs2TWR2MIPXcD0iogemjM= | |
DKIM-Signature: | v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id |
:list-unsubscribe:list-subscribe:list-archive:list-post | |
:list-help:sender:to:from:subject:message-id:date:mime-version | |
:content-type:content-transfer-encoding; s=default; bh=fE7nJibKi | |
yP2lZ4namImObnfXLA=; b=EdnVVrR+ktrQdMz/H0R+stRh6gKRJ9+tVHSKqp803 | |
TatYh3KxOrPhrQBMXRMX9Ih6jioZWNrW/CRTeYysLT3fFyHedanVbe/id1t6W4sC | |
mCskfQgcRaw5SUFlvbNZtU4Yit5tBvwuGpqkvysy1jT0f0dMFVrT/TSgsMzJvpyn | |
cI= | |
Mailing-List: | contact cygwin-help AT cygwin DOT com; run by ezmlm |
List-Id: | <cygwin.cygwin.com> |
List-Subscribe: | <mailto:cygwin-subscribe AT cygwin DOT com> |
List-Archive: | <http://sourceware.org/ml/cygwin/> |
List-Post: | <mailto:cygwin AT cygwin DOT com> |
List-Help: | <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs> |
Sender: | cygwin-owner AT cygwin DOT com |
Mail-Followup-To: | cygwin AT cygwin DOT com |
Delivered-To: | mailing list cygwin AT cygwin DOT com |
Authentication-Results: | sourceware.org; auth=none |
X-Spam-SWARE-Status: | No, score=1.6 required=5.0 tests=BAYES_50,HTML_MESSAGE,RCVD_IN_DNSWL_NONE,SPF_NEUTRAL autolearn=no version=3.3.2 spammy=H*r:sk:sonic.g, yahoo.com, yahoocom, UD:yahoo.com |
X-HELO: | sonic306-4.consmr.mail.bf2.yahoo.com |
DKIM-Signature: | v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1531695686; bh=Et+iHZoIzoYWph7plxxj+B3qTprPTEcKHOx5aX3xstk=; h=To:From:Subject:Date:From:Subject; b=Cxh+udyaRgeCMNiMOSmpONTBsvbdq7oD0yqeQftQwdas9F/PbKuKHcO6KjCNxJTdSBAPMgPiJetwLIDL+NbzenvX6Nkrv83t0uwG+s0O1BrX7J47+cpcfngBPngBcPNwxI8zH9PqF9EqQltMT3QJD5FXh8gHxL/8ffYf94f2+Mj4uK88+EpwFwf1i6ZO7QaKOX31EERiJHXuMNML3qeyXCssMuTFZUvaDrwBbRWK66FXqRO73ZovrhUiA+LLoN7Kn/QKmvv8agkNLhPJC9tTA1EhXNfv7Vykv4U7eEp0qyIPfgoWbqsyZXJ3kOKqB1kr2Ikj3eUZz1MD+RGL8OTInw== |
To: | cygwin AT cygwin DOT com |
From: | BloomingAzaleas <rdbingham AT verizon DOT net> |
Subject: | BASH 4.4 mapfile/readarray/read builtins mis-behaving with pipe |
Message-ID: | <69b0bc3c-7ead-920e-f04b-ec631c3453b7@verizon.net> |
Date: | Sun, 15 Jul 2018 19:01:21 -0400 |
User-Agent: | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.23) Gecko/20090812 Lightning/0.9 Thunderbird/2.0.0.23 Mnenhy/0.7.6.666 |
MIME-Version: | 1.0 |
X-MIME-Autoconverted: | from quoted-printable to 8bit by delorie.com id w6FN1m0l004901 |
Windows 10 Pro 10.0.17134 N/A Build 17134 patched through 15 July 2018 Cygwin 2.10.0(0.325/5/3) Bash 4.4.12(3) Cygwin man pages show:  mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]  readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c       quantum] [array]    Read lines from the standard input into the indexed array variable array, or ...  read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]     One line is read from the standard input, or ... So the expectation is that all bash stdin re-directions such as pipes and left chevs should work. For mapfile/readarry, the output array variable MAPFILE is described as being created if not array_var argument is given to mapfile. A) Searched cygwin email list with terms 'mapfile', 'readarray' and 'read builtin'. No obvious hits of recent vintage in summary result list. B) Confirm, not using mapfile/readarry/read, that bash stdin redirs work as expected. echo multi-line_arg | /bin/cat /bin/cat < some_unix_fmt_file /bin/cat <<END some lines END all work as expected. C) Test mapfile/readarray/read in various stdin redir situations. Basic harnesses are : mapfile/readarry HARNESS: stdin or fd 0 feed to mapfile then : "${MAPFILE[@]:?MAPFILE null or unset}" if get past the ${:?} test then dump MAPFILE with a simple /for /loop as: for ent in "${MAPFILE[@]}" ; do echo ="${ent}"= ; done read HARNESS: stdin feed to 'read foo' then : "${foo:?foo null or unset}" if get past the ${:?} test then dump variable foo with echo ="${foo}"= CASES: echo multi-line_arg | mapfile cat multi-line_unix_fmt_file | mapfile RESULT: Fail with MAPFILE null or unset If 'for' loop forced, "${MAPFILE[@]}" expands to zero words. CASE: echo multi-line_arg | read foo cat multi-line_unix_fmt_file | read foo  RESULT: Fail with variable foo null or unset CASES: left chev re-directions mapfile < some_unix_fmt_file mapfile <<END multi-line_here_doc read < some_unix_fmt_file read <<END multi-line_here_doc RESULT: Work as expected CASES: mapfile or read in a sub-shell echo multi-line_arg | ( mapfile ; stuff ) echo multi-line_arg | ( read foo; stuff ) RESULT: Work as expected. However, since mapfile/read result vars are not accessible in parent shell context, can force a notable re-structuring of a script to use sub-shells. CONCLUSIONS: For bash builtins mapfile/readarray and read, stdin pipe re-direction directly to the builtin fails as if the builtin read()/fread() sees a silent pre-mature EOF on the pipe. In the sub-shell tests, the pipe re-direction happens for the sub-shell as a whole before commands internal to the sub-shell get processed for individual re-dirs, so no re-dir processing directly for the builtin. -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
webmaster | delorie software privacy |
Copyright © 2019 by DJ Delorie | Updated Jul 2019 |