我可以使用以下命令通过 SMS 发送短信:
$ /usr/share/ofono/scripts/send-sms /ril_0 07123456789 "iorem ipsum est" 0
/ril_0
SIM 卡/调制解调器在哪里,07123456789
是电话号码,"iorem ipsum est"
是需要发送的文本,最后0
是(我认为)一个布尔值,用于确定脚本是否会请求传送报告。
这工作正常,并产生输出:
Send message using modem /ril_0 ...
/ril_0/message_20C76858222F2CDF61342FC317BF53AC4B763441
然而,这似乎不起作用:
$ echo '"iorem ipsum est"' > textfile
$ /usr/share/ofono/scripts/send-sms /ril_0 07123456789 $(cat textfile) 0
我尝试了一些排列、反引号等等;它们都不起作用,并且都产生如下输出:
Send message using modem /ril_1 ...
Traceback (most recent call last):
File "/usr/share/ofono/scripts/send-sms", line 31, in <module>
mm.SetProperty("UseDeliveryReports", dbus.Boolean(int(sys.argv[3])))
ValueError: invalid literal for int() with base 10: '"iorem'
/ril_1
是第二张 SIM 卡的位置(如果有的话),我猜其余的是堆栈跟踪?
不管怎样,这个方法效果很好:
$ echo '"iorem"' > textfile
$ /usr/share/ofono/scripts/send-sms /ril_0 07123456789 $(cat textfile) 0
所以我猜问题在于$()
处理包含空格的输出的方式?
我已将内容粘贴/usr/share/ofono/scripts/send-sms
至http://pastebin.com/u8gHMc5R(当然,源代码可以从 Ubuntu 下载,地址:http://packages.ubuntu.com/en/vivid/ofono-scripts)。
我真的不想弄乱原始的 Python 脚本(即使我懂一点 Python,但我不知道!),但如果没有我不知道的 shell 解决方案(也许是使用管道或 xargs 的东西?)我不会反对使用原始脚本或其他东西的另一个脚本的想法。
我的系统是运行 15.04 (r23) 的 BQ Aquaris。为了避免造成影响,我通过 ssh 运行所有这些命令,而不是将它们输入到手机中。
非常感谢您的帮助。哦,如果我应该在其他地方发布此内容,例如在 Stack Overflow 或类似的地方(因为都是 Python),请告诉我!
答案1
使用双引号括起命令替换。此外,在命令中要么使用单引号,要么使用双引号echo
,无需同时使用两者:
echo 'iorem ipsum est' > textfile
/usr/share/ofono/scripts/send-sms /ril_0 07123456789 "$(cat textfile)" 0