#!/bin/bash # use bash for trap set -eu # default options queuefn="queue.txt" donefn="done.txt" port=1340 usage() { cat <&2; exit 1; fi eval set -- "$TEMP" while true; do case "$1" in -h|--help) usage; exit 0;; -p|--port) port="$2"; shift 2;; -q|--queue) queuefn="$2"; shift 2;; -d|--done) donefn="$2"; shift 2;; --) shift; break;; *) echo "Arguments parsing error" >&2; exit 1;; esac done my_exit() { mv "${queuefn}" "${queuefn}.old" comm --nocheck-order -23 "${queuefn}.old" "${donefn}" > "${queuefn}" exit 0 } trap my_exit SIGINT SIGTERM cat "${queuefn}" | while read -r line; do printf "%s\n" "$line" | nc -q0 -l -p $port printf "%s\n" "$line" done > "${donefn}"