Bash回车和Ctrl-Z按键

5

我有一个minicom的命令,可以通过SSH/Putty使用modem发送短信,以下是该命令:

AT^HCMGS="destination number"<press ENTER>
> SMS message <press CTRL + Z>

使用minicom命令成功执行

我想问如何在bash中模拟按下ENTER和CTRL+Z键,我能像这样编写脚本吗?

#!/bin/bash
echo -e -n "AT^HCMGS="888"(I don't know how to insert enter/return)" > /dev/ttyUSB0
echo -e -n "SMS message (I don't know how to insert ctrl+z)" > /dev/ttyUSB0

我希望能够将一个程序 (motion linux)与这个openWRT脚本进行整合。
谢谢!

2
尝试使用\032代替^Z部分,使用\n代替ENTER - anishsane
2
此外,您需要转义 888 周围的 "。使用 \"888\" - anishsane
1
假设CTRL+Z实际上是暂停程序,"正确的"方法是kill -STOP $PID。您可以使用管道echo(不带-n)或以其他方式发送\n来获取回车键。 - Adam Katz
1
另一个经常有效的选项是Ctrl+v =>您想要的键。例如:Ctrl+v 然后按下 <Return键> - volker
3个回答

3

使用Shell命令向号码+48333444555发送消息test

echo -e 'AT+CMGS="+48333444555"^Mtest^Z' > /dev/ttyUSB0

重要提示:

  1. 想要得到 ^M,您需要按下 Ctrl+V 然后按下 Ctrl+M。
  2. 想要得到 ^Z,您需要按下 Ctrl+V 然后按下 Ctrl+Z。

1
问题要求如何将此内容编写为Bash脚本。这个答案特别依赖于直接在提示符下执行命令。它不展示如何将^M和^Z编码到可以运行的Bash脚本中。 - Jono
@user3719188 PDU模式怎么样?我从adb shell得到“未找到”响应。 - Rony Tesler
可以使用printf通过SSH发送^Z: printf '\x1a' > /dev/ttyUSB0 - Stack Em Up

0

$ man skill:

SYNOPSIS
        skill [signal] [options] expression

PROCESS SELECTION OPTIONS

   -t, --tty tty
          The next expression is a terminal (tty or pty).

EXAMPLES

        skill -KILL -t /dev/pts/*
            Kill users on PTY devices.

应该是这样的(不能验证):skill -STOP --tty /dev/ttyUSB0


我理解你的意思,但这不是 OP 的意思。 - lucaswxp

0
对于CR(回车),您可以使用\r。对于Ctrl+Z,您可以使用其键码,格式为\x<code><code>是十六进制的ASCII码);它的十进制码是26,所以十六进制是1A,因此Ctrl+Z将是\x1A
所以,请这样做:
echo -e -n 'AT^HCMGS="888"\r' > /dev/ttyUSB0
# Wait for the prompt, do not send the SMS immediately
echo -e -n 'SMS Message\x1A' > /dev/ttyUSB0

注意:不要忘记为两个echo命令都使用-e选项!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接