gpt4 book ai didi

linux - cu 不发送 TTY 响应到 bash 输出

转载 作者:太空宇宙 更新时间:2023-11-04 10:12:07 25 4
gpt4 key购买 nike

我正在执行以下命令,打开串行控制台并将“LM\r”命令发送到我的远程设备;我得到“LM122.0P”作为答案:

$ sudo cu -l /dev/AR2300CTRL -s 115200 -h
Connected.
LM^MLM122.0P
~~..
Disconnected.

但是,当我尝试使用以下命令读取该答案作为 cu 的输出时,我没有得到任何信息:

$ resp=$(
echo "LM\r" |\
sudo cu -l /dev/AR2300CTRL -s 115200 |\
grep -v 'cu' | grep -v 'onnected.'
)
cu: End of file on terminal
cu: child: Got signal 9
$ echo $resp

我错过了什么?我不应该在“resp”变量中获得对命令的响应吗?

最佳答案

在那条管道中,echo命令将在将文本写入管道后立即退出 cu因此是 cu 的标准输入将尽快关闭 cu使用 echo 中的文本命令。关闭标准输入将导致 cu终止——这就是它发出“终端文件结束”消息的原因。

这一切都将在设备有机会向 cu 回写任何内容之前发生,因此永远不会收集响应消息并将其传递到 $resp .

要修复,做一些事情来保持 cu的标准输入打开足够长的时间以允许发送、收集设备响应并将其写入 cu的输出。一种简单的方法是从执行 sleep 的子进程中提供管道。在 echo 之后几秒钟命令。像这样:

resp=$(
(echo "LM\r" ; sleep 6) |\
sudo cu -l /dev/AR2300CTRL -s 115200 |\
grep -v 'cu' | grep -v 'onnected.'
)

关于linux - cu 不发送 TTY 响应到 bash 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48436291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com