Sample Header Ad - 728x90

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