Прошло некоторое время с тех пор, как оп опубликовал это, поэтому они могут не видеть этого, но это может помочь кому-то еще.
В любом случае, я изучал эту проблему и обнаружил следующее.
Открытые fd (файловые дескрипторы) процесса перечислены в /proc//fd.
exec 3<>/dev/tcp/localhost/9999
#check if still connected
if [ $(ls /proc/$$/fd | grep -w "3") == 3 ]; then
#send data
echo -e "Some Command\n" >&3
else
#perform reconnect
exec 3<>/dev/tcp/localhost/9999
fi
Это не было проверено, но должно быть в основном нормально.Могут быть и некоторые улучшения.Также есть окно, где fd исчезает между вашей проверкой и записью в fd.Однако это касается всех решений.