[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
`declare -f` incorrectly displays `coproc` statement
From: |
Albert Akchurin |
Subject: |
`declare -f` incorrectly displays `coproc` statement |
Date: |
Mon, 11 Dec 2023 20:41:58 +0600 |
Configuration Information [Automatically generated, do not change]:
Machine: x86_64
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS: -g -O2
uname output: Linux fs 6.5.11-7-pve #1 SMP PREEMPT_DYNAMIC PMX 6.5.11-7
(2023-12-05T09:44Z) x86_64 GNU/Linux
Machine Type: x86_64-pc-linux-gnu
Bash Version: 5.2
Patch Level: 21
Release Status: release
Description:
`declare -f` wrongly displays the `coproc my_command` statement.
It adds the word COPROC after the `coproc` word. I use some kind
of RPC in my scripts, so after several passes of the function,
the line becomes: `coproc COPROC COPROC ... COPROC my_command`
Repeat-By:
# define a function:
process() {
coproc inotifywait -qm /home
read -u ${COPROC[0]} event
}
# display it
declare -f process
process ()
{
coproc COPROC inotifywait -qm /home;
read -u ${COPROC[0]} event
}
# iterate 2 times (just to test):
source <(declare -f process)
source <(declare -f process)
declare -f process
process ()
{
coproc COPROC COPROC COPROC inotifywait -qm /home;
read -u ${COPROC[0]} event
}
Fix:
# use curly braces:
process() {
coproc { inotifywait -qm /home; }
read -u ${COPROC[0]} event
}
# in this case the word COPROC is added only once and further
# calls does not change it, so the function works as expected.
# But the drawback in this approach is that more processes are
created.
# It can be seen in pstree:
test───test───inotifywait
# In comparison with plain `coproc`:
test───inotifywait
- `declare -f` incorrectly displays `coproc` statement,
Albert Akchurin <=