[colug-432] tty script to scrutinize

jep200404 at columbus.rr.com jep200404 at columbus.rr.com
Sun Aug 8 21:29:44 EDT 2010


What bugs do you see in the script below? 

The script lets me to talk to a raw serial port. 
I seldom do scripts, so I do not know the pitfalls. 
I am most concerned about killing off the background task that 
listens on the serial port. I know the script fails to kill 
the background task if the script receives a -9 signal. 
For the other signals (that I _can_ catch), 
I've tried to make sure that there are no mutex issues. 

   [jep200404 at test ~]$ cat bin/ttycat
   if [ $# -ge 1 ]; then
      port="$1"
   else
      echo "Usage: ${0##*/} device"
      echo "where device is serial (RS-232/UART) port"
      echo "E.g., ${0##*/} /dev/ttyS0"
      echo
      echo "stdin is copied to device"
      echo "data received from device is copied to stdout"
      exit 1
   fi
   
   # echo "port='$port'"
   
   stty --file="$port" -parenb cs8 -cstopb raw -crtscts 19200 -hupcl -onlcr -echo -echoe -echoctl -echok -echoke -echonl -echoprt -icanon -iexten -isig
   # stty --file="$port" -parenb cs8 -cstopb raw -crtscts 19200 -hupcl -onlcr -echo -echoe -echoctl -echok -echoke -echonl -echoprt -icanon -iexten -isig ixoff ixon
   
   exitvalue=1
   signalcaught=0
   trap 'signalcaught=1' 0 HUP INT QUIT TERM
   
   cat <$port &
   bpid=$!
   # echo "background pid is $! aka $bpid"
   
   handleSignal()
   {
      # echo "will kill $bpid"
      kill $bpid
      exit $exitvalue
   }
   
   trap 'handleSignal' 0 HUP INT QUIT TERM
   if [ $signalcaught -ne 0 ]; then
      # echo caught quick signal
      trap : 0 HUP INT QUIT TERM ;# to avoid re-entrancy issues
      handleSignal
   fi
   
   cat - >$port
   
   exitvalue=0
   exit 0
   
   [jep200404 at test ~]$ 

By the way, I might move the stty stuff elsewhere, 
but that's minor trivial stuff. 
Turning off the line-at-a-time processing/buffering 
of stdin (except for ^D for EOF and ^C to stop), 
when it's from a console would be nice, 
but I'm just too lazy to fight my way through that. 

I've tried minitel, but it has too much stuff that 
gets in the way. 

Are there better ways for a shell script to talk to a serial 
port? 



More information about the colug-432 mailing list