使用shellscript从串口读取

时间:2016-11-19 09:04:02

标签: shell ubuntu cat

我有一个串口设备,我想用Linux命令行测试。

如果我从终端运行以下命令,它会输出

cat < /dev/ttyS0 &

这个命令打开串口并将它从它读取的内容转发到它的stdout.So,我从shell脚本文件中尝试了它但是它没有工作

fName="test.txt";
awk '
BEGIN { RS = "" ; FS = "\n" }
{
     address = '/dev/ttyS0';
     system("cat < " address );
}
END {
    }' "$fName";

但它无法正常工作并提供输出。如何监听进程和串口之间的通信?感谢

1 个答案:

答案 0 :(得分:0)

使用超时

我已成功阅读dash下的内容,使用GAWK_READ_TIMEOUT环境变量:

out=`GAWK_READ_TIMEOUT=3000 awk '{print}' </dev/ttyS0 & sleep 1 ; echo foo >/dev/ttyS0`

在我的终端上,此输出:

echo "$out"
foo

Password: 

echo "$out"

Login incorrect

testhost login: 

使用超时

您可以在下使用FD作为:

exec 5>/dev/ttyS0
exec 6</dev/ttyS0

while read -t .1 -u 6 line;do
    echo $line
  done

或者,读取未完成的行:

while IFS= read -d '' -t .1 -u 6 -rn 1 char;do
    echo -n "$char"
  done
echo

所以你可以:

echo 'root' >&5
while IFS= read -d '' -t .1 -u 6 -rn 1 char;do
    echo -n "$char"
  done
echo 'password is 1234' >&5
while IFS= read -d '' -t .1 -u 6 -rn 1 char;do
    echo -n "$char"
  done

......完成后,您可以通过运行来关闭FD:

exec 6<&-
exec 5>&-

示例糟糕的终端脚本

我已经记录并使用以下命令测试一些命令:

#!/bin/bash

exec 5>/dev/ttyS0
exec 6</dev/ttyS0

readbuf() {
    while IFS= read -d '' -t .1 -u 6 -rn 1 char;do
    echo -n "$char"
  done
};

while [ "$cmd" != "tquit" ] ;do
    readbuf
    read cmd
    echo >&5 "$cmd"
done