r0c/clients/bash.sh

60 lines
1002 B
Bash
Executable File

#!/bin/bash
set -e
# --------------------------------------------
# tcp plaintext client without linebuffering
# --------------------------------------------
# uses bash internals wherever possible,
# let me know if I missed some opportunities
# --------------------------------------------
debug=''
#debug=1
cat_pid=''
function ctrl_c()
{
kill $cat_pid
exit 0
}
function connect()
{
# hook ctrl-c for cleanup
trap ctrl_c INT
# open the tcp connection
exec 147<>/dev/tcp/$1/$2
# dump socket to stdout
cat <&147 & cat_pid=$!
# read keyboard and send each key to the socket
while IFS= read -rn1 x
do
[ "x$x" == "x" ] &&
x=$'\n'
[ $debug ] &&
{
printf '%s' "$x" |
tee /dev/stderr 2>&1 >&147 |
xxd -c8 -g1 >> /dev/shm/r0c-log
} ||
printf '%s' "$x" >&147
done
}
[ "x$2" == x ] &&
{
echo
echo " r0c client (bash edition)"
echo " need argument 1: r0c server ip or hostname"
echo " need argument 2: r0c server port"
echo
exit 1
}
connect $1 $2