Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: reopening/resetting/tee'ing pipes?
On Aug 8, 9:49pm, Aaron Davies wrote:
}
} % ./bar.sh <(echo foo)
} 1
} foo
} 2
} 3
}
} is it possible to get another "foo" between 2 & 3 there given that
} i'm reading from a pipe? (both portable and zsh-only solutions are
} welcome)
Pipes are can't be rewound/reopened (in parlance, are not "seekable")
so there is no solution that doesn't involve copying the data. You
can do that in the calling zsh like so:
% ./bar.sh =(echo foo)
Or you can do it inside the script:
#!/bin/zsh
STDIN="$(cat $1)" # Stash in memory
echo 1
cat <<<"$STDIN"
echo 2
cat <<<"$STDIN"
echo 3
Or:
#!/bin/zsh
function do_bar {
echo 1
cat $1 # This is the function's $1, not the script's $1
echo 2
cat $1
echo 3
}
do_bar =(cat $1) # Stash in autoremoved temp file
There are various other tricks you can play to avoid the extra "cat"
but they all involve testing whether $1 is set. The examples above
rely on cat reading from stdin when $1 expands to nothing.
Messages sorted by:
Reverse Date,
Date,
Thread,
Author