我有一个串行端口设备,我想使用 Linux 命令行进行测试。
如果我从终端运行以下命令,它会给出输出
cat < /dev/ttyS0 &
此命令打开串行端口并将其读取的内容中继到其标准输出。所以,我从 shell 脚本文件尝试了它,但它不工作
fName="test.txt";
awk '
BEGIN { RS = "" ; FS = "\n" }
{
address = '/dev/ttyS0';
system("cat < " address );
}
END {
}' "$fName";
但它不工作并给出输出。如何监听进程和串口之间的通信?谢谢
最佳答案
使用 awk超时
我已成功阅读 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超时
您可以在 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>&-
sample bash糟糕的终端脚本
我已经记录并测试了一些命令:
#!/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
关于shell - 使用 shell 脚本从串行读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40691060/