【问题标题】:ADB shell script to send AT commands to a modem-cannot return control to a shell and capture output用于向调制解调器发送 AT 命令的 ADB shell 脚本 - 无法将控制权返回给 shell 并捕获输出
【发布时间】: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 

现在有两个我无法解决的问题:

  1. 我仍然需要手动按 ENTER 按钮才能返回 adb shell 提示符“#”。有没有办法退货 以编程方式“#”提示?同样,我在 adb shell 中。
  2. 显示的响应无法被捕获,既不是在变量中,也不是在文件中,(如(#./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


【解决方案1】:

我建议你试试我的atinout 程序,它应该正是你所要求的:从命令行发送 AT 命令并捕获输出的程序。

在你的情况下,结果应该是这样的

$ echo 'at+cops?' | atinout - /dev/pts/7 -
+COPS: 0,0,"AT&T",6

OK
$

要捕获输出,只需输入文件名而不是最后一个 -

【讨论】:

    【解决方案2】:

    我在将输出重定向到文件时遇到了类似的问题。我通过在 echo 命令前面添加 CMD /c 解决了我的问题。 IE。如果我理解正确,您需要告诉系统它需要等到命令完成执行,然后才将输出重定向到文件。我是在DOS下做的。

    由于您在 ANDROID 上运行,请尝试在命令前添加 sh -c。希望能帮助到你。

    【讨论】:

      猜你喜欢
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多