Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: bug with eval, proc-subst and pipes
On Wed, Jul 17, 2013 at 3:17 PM, Peter Stephenson
<p.w.stephenson@xxxxxxxxxxxx> wrote:
> On Wed, 17 Jul 2013 00:00:27 -0700
> Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> wrote:
>> On Jul 16, 9:55pm, Peter Stephenson wrote:
>> } It may therefore be a different problem from Stephane's.
>>
>> I don't think so, fundamentally. The problem in both cases is that the
>> file descriptor for the process substitution is closed before the data
>> is read. This has the unintended side-effect of removing the special
>> device file. The reasons for the premature descriptor close may be
>> different, but the end result is the same; I believe fixing either one
>> would fix both.
>
> We can see...
"make check" now hangs and cannot be interrupted with ^C. This is on
a Fedora 18 system with the following configure options:
/opt/src/zsh-2013-07-17/configure' '--prefix=/opt/zsh-2013-07-17'
'--datadir=/opt/share' '--enable-etcdir=/opt/etc' '--with-tcsetpgrp'
'--enable-zsh-mem' '--enable-pcre' 'CC=gcc'
Let me know if you need me to run any more tests.
Here's a verbose trace:
ZTST_verbose=3 make TESTNUM=D03 check
cd Test ; make check
make[1]: Entering directory `/opt/build/zsh-2013-07-17/Test'
if test -n "gcc"; then \
cd .. && DESTDIR= \
make MODDIR=`pwd`/Test/Modules install.modules > /dev/null; \
fi
if ZTST_testlist="`for f in /opt/src/zsh-2013-07-17/Test/D03*.ztst; \
do echo $f; done`" \
ZTST_srcdir="/opt/src/zsh-2013-07-17/Test" \
ZTST_exe=../Src/zsh \
../Src/zsh +Z -f /opt/src/zsh-2013-07-17/Test/runtests.zsh; then \
stat=0; \
else \
stat=1; \
fi; \
sleep 1; \
rm -rf Modules .zcompdump; \
exit $stat
/opt/src/zsh-2013-07-17/Test/D03procsubst.ztst: starting.
ZTST_getsect: read section name: prep
ZTST_getchunk: read code chunk:
if grep '#define PATH_DEV_FD' $ZTST_testdir/../config.h > /dev/null 2>&1 ||
grep '#define HAVE_FIFOS' $ZTST_testdir/../config.h > /dev/null 2>&1; then
mkdir procsubst.tmp
cd procsubst.tmp
print 'First\tSecond\tThird\tFourth' >FILE1
print 'Erste\tZweite\tDritte\tVierte' >FILE2
else
ZTST_unimplemented="process substitution is not supported"
true
fi
ZTST_execchunk: status 0
ZTST_getchunk: read code chunk:
function copycat { cat "$@" }
ZTST_execchunk: status 0
ZTST_getchunk: read code chunk:
ZTST_getsect: read section name: test
ZTST_test: looking for new test
ZTST_test: examining line:
paste <(cut -f1 FILE1) <(cut -f3 FILE2)
ZTST_getchunk: read code chunk:
paste <(cut -f1 FILE1) <(cut -f3 FILE2)
ZTST_test: examining line:
>First Dritte
ZTST_getredir: read redir for '>':
First Dritte
ZTST_test: examining line:
Running test: <(...) substitution
ZTST_test: expecting status: 0
Input: /tmp/zsh.ztst.in.15606, output: /tmp/zsh.ztst.out.15606, error:
/tmp/zsh.ztst.terr.15606
ZTST_execchunk: status 0
ZTST_test: test produced standard output:
First Dritte
ZTST_test: and standard error:
Test successful.
ZTST_test: looking for new test
ZTST_test: examining line:
ZTST_test: examining line:
{ paste <(cut -f2 FILE1) <(cut -f4 FILE2) } > >(sed 's/e/E/g' >OUTFILE)
ZTST_getchunk: read code chunk:
{ paste <(cut -f2 FILE1) <(cut -f4 FILE2) } > >(sed 's/e/E/g' >OUTFILE)
cat OUTFILE
ZTST_test: examining line:
>SEcond ViErtE
ZTST_getredir: read redir for '>':
SEcond ViErtE
ZTST_test: examining line:
Running test: >(...) substitution
ZTST_test: expecting status: 0
Input: /tmp/zsh.ztst.in.15606, output: /tmp/zsh.ztst.out.15606, error:
/tmp/zsh.ztst.terr.15606
ZTST_execchunk: status 0
ZTST_test: test produced standard output:
SEcond ViErtE
ZTST_test: and standard error:
Test successful.
ZTST_test: looking for new test
ZTST_test: examining line:
ZTST_test: examining line:
diff =(cat FILE1) =(cat FILE2)
ZTST_getchunk: read code chunk:
diff =(cat FILE1) =(cat FILE2)
ZTST_test: examining line:
>1c1
ZTST_getredir: read redir for '>':
1c1
< First Second Third Fourth
---
> Erste Zweite Dritte Vierte
ZTST_test: examining line:
Running test: =(...) substituion
ZTST_test: expecting status: 1
Input: /tmp/zsh.ztst.in.15606, output: /tmp/zsh.ztst.out.15606, error:
/tmp/zsh.ztst.terr.15606
ZTST_execchunk: status 1
ZTST_test: test produced standard output:
1c1
< First Second Third Fourth
---
> Erste Zweite Dritte Vierte
ZTST_test: and standard error:
Test successful.
ZTST_test: looking for new test
ZTST_test: examining line:
ZTST_test: examining line:
copycat <(print First) <(print Zweite)
ZTST_getchunk: read code chunk:
copycat <(print First) <(print Zweite)
ZTST_test: examining line:
>First
ZTST_getredir: read redir for '>':
First
Zweite
ZTST_test: examining line:
Running test: FDs remain open for external commands called from functions
ZTST_test: expecting status: 0
Input: /tmp/zsh.ztst.in.15606, output: /tmp/zsh.ztst.out.15606, error:
/tmp/zsh.ztst.terr.15606
ZTST_execchunk: status 0
ZTST_test: test produced standard output:
First
Zweite
ZTST_test: and standard error:
Test successful.
ZTST_test: looking for new test
ZTST_test: examining line:
ZTST_test: examining line:
catfield2() {
ZTST_getchunk: read code chunk:
catfield2() {
local -a args
args=(${(s.,.)1})
print $args[1]
cat $args[2]
print $args[3]
}
catfield2 up,<(print $'\x64'own),sideways
ZTST_test: examining line:
>up
ZTST_getredir: read redir for '>':
up
down
sideways
ZTST_test: examining line:
Running test: <(...) when embedded within an argument
ZTST_test: expecting status: 0
Input: /tmp/zsh.ztst.in.15606, output: /tmp/zsh.ztst.out.15606, error:
/tmp/zsh.ztst.terr.15606
ZTST_execchunk: status 0
ZTST_test: test produced standard output:
up
down
sideways
ZTST_test: and standard error:
Test successful.
ZTST_test: looking for new test
ZTST_test: examining line:
ZTST_test: examining line:
outputfield2() {
ZTST_getchunk: read code chunk:
outputfield2() {
local -a args
args=(${(s.,.)1})
print $args[1]
echo 'How sweet the moonlight sits upon the bank' >$args[2]
print $args[3]
}
outputfield2 muddy,>(sed -e s/s/th/g >outputfield2.txt),vesture
# yuk
while [[ ! -e outputfield2.txt || ! -s outputfield2.txt ]]; do :; done
cat outputfield2.txt
ZTST_test: examining line:
>muddy
ZTST_getredir: read redir for '>':
muddy
vesture
How thweet the moonlight thitth upon the bank
ZTST_test: examining line:
Running test: >(...) when embedded within an argument
ZTST_test: expecting status: 0
Input: /tmp/zsh.ztst.in.15606, output: /tmp/zsh.ztst.out.15606, error:
/tmp/zsh.ztst.terr.15606
- Vin
Messages sorted by:
Reverse Date,
Date,
Thread,
Author