我有一个串口设备,我想用Linux命令行测试。
如果我从终端运行以下命令,它会输出
cat < /dev/ttyS0 &
这个命令打开串口并将它从它读取的内容转发到它的stdout.So,我从shell脚本文件中尝试了它但是它没有工作
fName="test.txt";
awk '
BEGIN { RS = "" ; FS = "\n" }
{
address = '/dev/ttyS0';
system("cat < " address );
}
END {
}' "$fName";
但它无法正常工作并提供输出。如何监听进程和串口之间的通信?感谢
答案 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:
您可以在bash下使用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