【发布时间】:2012-03-06 09:04:56
【问题描述】:
我已经发布了类似的问题,但仍然无法完成我的工作,所以这是第二次尝试,其中 我想更清楚地说明我的绊脚石。
所以基本上我在Android手机的adb shell中,通过发送AT命令与GPRS调制解调器通信。 我可以通过将命令重定向到代表调制解调器的设备文件来做到这一点;我可以回读 使用在后台运行的 cat 实用程序的响应(较早开始)。我在脚本中实现了它 它可以发送单个 AT 命令并读回响应。例如,这里是脚本 派人+警察?获取手机所在的运营商名称:
#SendATCommand script
cat /dev/pts/7 &
echo -e at+cops?\\r > /dev/pts/7
输出如下:
# ./sendATCommand
./sendATCommand
#
+COPS: 0,0,"AT&T",6
OK
/dev/pts/7: invalid length
现在有两个我无法解决的问题:
- 我仍然需要手动按 ENTER 按钮才能返回 adb shell 提示符“#”。有没有办法退货 以编程方式“#”提示?同样,我在 adb shell 中。
- 显示的响应无法被捕获,既不是在变量中,也不是在文件中,(如(#./sendATCommand > output.txt) output.txt文件会是空的。我尝试了各种重定向,但仍然没有得到它可以工作。
谁能帮我解决这两个问题(如果可能的话)?最终我希望这个小脚本成为 从我的 Android 设备所在的 PC 上运行的“超级”脚本(例如 Perl 或 Powershell)调用 已连接,但在这两个问题解决之前无法执行此操作。提前非常感谢!
【问题讨论】:
-
你为什么有
\\r?不仅仅是\r,或者尝试\n,或者更常见的是当涉及\r时,\r\n。为什么您认为您收到“无效长度”消息?不是android人,所以这就是我所提供的。祝你好运。 -
刚刚尝试了您的建议 - 不起作用。仅适用于双反斜杠,即 \\r.所以还是没有解决。
-
AT 命令行应该以(可能转义)
\r结束,stackoverflow.com/a/21503919/23118。不要使用\n。 -
想一想,在没有使用 atinout 的情况下,仅使用 shell 命令发送 AT 命令的正确方法是
echo 'at+cops?' | tr '\012' '\015' > /dev/pts/7,其中 tr 命令将\n转换为\r。但正如您所注意到的,I/O 流可能仍然很脆弱。
标签: android shell command adb at-command