Strange incongruent output for both nc and fifo
0
votes
0
answers
37
views
I have this exact code:
#!/bin/bash
gtimeout(){
if type -f gtimeout &> /dev/null; then
command gtimeout "$@"
else
timeout "$@"
fi
}
export -f gtimeout;
on_first_match(){
local pattern="$1" # The pattern to search for
while IFS= read -r line; do
if [[ "$line" == *"$pattern"* ]]; then
exit 0
fi
done
}
export -f on_first_match
write_to_server(){
echo -e "$?" | nc 0.0.0.0 3333
}
export -f write_to_server
(
set +e;
sleep 2;
(
gtimeout 15 docker logs -f rabbitmq-node1 | on_first_match 'Starting listener on';
write_to_server
) &
(
gtimeout 15 docker logs -f mongodb-node1 | on_first_match 'waiting for connections';
write_to_server
) &
(
gtimeout 15 docker logs -f elasticsearch-node1 | on_first_match 'started';
write_to_server
) &
(
gtimeout 15 docker logs -f rabbitmq-node2 | on_first_match 'Starting listener on';
write_to_server
) &
(
gtimeout 15 docker logs -f mongodb-node2 | on_first_match 'waiting for connections';
write_to_server
) &
(
gtimeout 15 docker logs -f elasticsearch-node2 | on_first_match 'started';
write_to_server
) &
(
gtimeout 15 docker logs -f rabbitmq-node3 | on_first_match 'Starting listener on';
write_to_server
) &
(
gtimeout 15 docker logs -f mongodb-node3 | on_first_match 'waiting for connections';
write_to_server
) &
(
gtimeout 15 docker logs -f elasticsearch-node3 | on_first_match 'started';
write_to_server
) &
) &
gtimeout 30 nc -k -l 3333 | while IFS= read -r line; do
echo "Received: $line";
done
the output I get is like so:
Error response from daemon: No such container: mongodb-node1
Error response from daemon: No such container: rabbitmq-node2
Error response from daemon: No such container: rabbitmq-node1
Error response from daemon: No such container: elasticsearch-node2
Error response from daemon: No such container: elasticsearch-node1
Error response from daemon: No such container: mongodb-node2
Error response from daemon: No such container: mongodb-node3
Error response from daemon: No such container: rabbitmq-node3
Error response from daemon: No such container: elasticsearch-node3
Received: 0
Received: 0
Received: 0
Received: 0
Received: 0
(with just 5 received lines, sometimes 4, sometimes 6 but never 9 as expected)
but I expect this:
Error response from daemon: No such container: mongodb-node1
Error response from daemon: No such container: rabbitmq-node2
Error response from daemon: No such container: rabbitmq-node1
Error response from daemon: No such container: elasticsearch-node2
Error response from daemon: No such container: elasticsearch-node1
Error response from daemon: No such container: mongodb-node2
Error response from daemon: No such container: mongodb-node3
Error response from daemon: No such container: rabbitmq-node3
Error response from daemon: No such container: elasticsearch-node3
Received: 0
Received: 0
Received: 0
Received: 0
Received: 0
Received: 0
Received: 0
Received: 0
Received: 0
with 9 received lines.
Anyone know what is going on here? (The same behavior happens when I switch the code out for a mkfifo instead of a socket).
Asked by Alexander Mills
(10734 rep)
Nov 22, 2023, 06:07 AM