[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
anonymous pipes in recursive function calls
From: |
Zachary Santer |
Subject: |
anonymous pipes in recursive function calls |
Date: |
Fri, 28 Jun 2024 18:38:13 -0400 |
Was "feature suggestion: ability to expand a set of elements of an
array or characters of a scalar, given their indices"
On Fri, Jun 28, 2024 at 5:29 PM Zachary Santer <zsanter@gmail.com> wrote:
> ( 2 )
> A script that I've written more recently generates some arrays
> describing everything it needs to do before it starts making updates. [...]
> And, yes, I am trying to do some complicated stuff in bash in the most
> reasonable way I can find. [...]
Speaking of, I finally got a chance to run this thing today. Has a
problem with an anonymous pipe in a recursive function call been
resolved since bash 4.2?
set -o nounset -o noglob +o braceexpand
shopt -s lastpipe
main () {
# initialize arrays
recursive_function .
# loop through arrays
}
recursive_function () {
local entry_path="${1}"
local starting_PWD="${PWD}"
local path
command this-file |
while IFS='' read -r -d '' path; do
cd -- "${starting_PWD}/${path}"
if [[ -r this-file ]]; then
recursive_function "${entry_path}/${path}"
fi
# fill arrays
# there is another anonymous pipe here, as well
done
#
if (( PIPESTATUS[0] != 0 )); then
printf '%s\n' "command failed" >&2
error='true'
fi
cd -- "${starting_PWD}"
}
main "${@}"
Looks like, at the end of the while loop in the first call to
recursive_function (), I get
/path/to/the/script: line <the line recursive_function () begins on>:
wait_for: No record of process <pid>.
recursive_function () is called from main () and then calls itself
twice from within the while loop in the first call, in my case.
PIPESTATUS[@] isn't doing what I would expect either. Sometimes it's a
one-element array. Sometimes it's two. It was giving me an exit status
of 1 at element 0 and no element 1, when I would expect "command" to
give an exit status of 0, but not every time.
Wound up doing
set -o nounset -o noglob +o braceexpand -o pipefail
shopt -s lastpipe
main () {
# initialize arrays
recursive_function .
# loop through arrays
}
recursive_function () {
local entry_path="${1}"
local starting_PWD="${PWD}"
local path
if ! \
command this-file |
{
while IFS='' read -r -d '' path; do
cd -- "${starting_PWD}/${path}"
if [[ -r this-file ]]; then
recursive_function "${entry_path}/${path}"
fi
# fill arrays
# there is another anonymous pipe here, as well.
done
true
}
#
then
printf '%s\n' "command failed" >&2
error='true'
fi
cd -- "${starting_PWD}"
}
main "${@}"
To work around the PIPESTATUS thing, but that hasn't made bash's error
message go away.
Not sure how I could come up with a repeat-by for this thing. It
already worked recursively before I modified it to track everything it
needed to do and then go back and do it. I don't think this error
message was present then. (This script produces a lot of output,
though.) I wasn't referencing PIPESTATUS[0] yet either. No way to run
this in a more recent version of bash.
I can try
while [...] done < <( command this-file )
later, to see if it *is* bash being unable to wait for the first
element of the pipeline in the first call to recursive_function (),
like it feels like it is.
- Re: feature suggestion: ability to expand a set of elements of an array or characters of a scalar, given their indices, (continued)
- Re: feature suggestion: ability to expand a set of elements of an array or characters of a scalar, given their indices, Oğuz, 2024/06/27
- Re: feature suggestion: ability to expand a set of elements of an array or characters of a scalar, given their indices, Zachary Santer, 2024/06/27
- Re: feature suggestion: ability to expand a set of elements of an array or characters of a scalar, given their indices, Martin D Kealey, 2024/06/28
- Re: feature suggestion: ability to expand a set of elements of an array or characters of a scalar, given their indices, Oğuz, 2024/06/28
- Re: feature suggestion: ability to expand a set of elements of an array or characters of a scalar, given their indices, Martin D Kealey, 2024/06/29
- Re: feature suggestion: ability to expand a set of elements of an array or characters of a scalar, given their indices, Zachary Santer, 2024/06/27
- Re: feature suggestion: ability to expand a set of elements of an array or characters of a scalar, given their indices, Zachary Santer, 2024/06/27
Re: feature suggestion: ability to expand a set of elements of an array or characters of a scalar, given their indices, Zachary Santer, 2024/06/28
- Re: feature suggestion: ability to expand a set of elements of an array or characters of a scalar, given their indices, Greg Wooledge, 2024/06/28
- Re: feature suggestion: ability to expand a set of elements of an array or characters of a scalar, given their indices, Zachary Santer, 2024/06/28
- anonymous pipes in recursive function calls,
Zachary Santer <=
- Re: anonymous pipes in recursive function calls, konsolebox, 2024/06/29
- Re: anonymous pipes in recursive function calls, Zachary Santer, 2024/06/29
- Re: anonymous pipes in recursive function calls, konsolebox, 2024/06/29
- Re: anonymous pipes in recursive function calls, Zachary Santer, 2024/06/29