shell - 使用 shell 脚本从串行读取

标签 shell ubuntu cat

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

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

cat < /dev/ttyS0 &

此命令打开串行端口并将其读取的内容中继到其标准输出。所以,我从 shell 脚本文件尝试了它,但它不工作
fName="test.txt";
awk '
BEGIN { RS = "" ; FS = "\n" }
{
     address = '/dev/ttyS0';
     system("cat < " address );
}
END {
    }' "$fName";

但它不工作并给出输出。如何监听进程和串口之间的通信?谢谢

最佳答案

使用 超时

我已成功阅读 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>&-

sample 糟糕的终端脚本

我已经记录并测试了一些命令:
#!/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/

相关文章:

xml - 提到开始和结束模式时,sed 正在删除多行

apache - 为什么页面没有完全加载?

macos - 将大量文件合并为一个

linux - "cat"和 "vim"之间的不同显示

c - 实现简单 linux shell 的问题

c - Shell 脚本 vs C 性能

java - 使用java作为linux shell脚本语言?

java - 使用 Google Cloud 对本地 Spring Boot 服务进行身份验证

linux - 重新启动 Nginx

linux - “猫文件”标准输出不同于 'cat file > textfile'