使用脚本将字符串传递给linux cli交互式程序

时间:2014-12-27 21:55:26

标签: linux bash telegram

我正在使用一个库来通过bash linux ubuntu中的命令行访问电报。 这是电报-cli。 参考https://github.com/vysheng/tg

这是一个交互式程序,可以通过

启动
./bin/telegram-cli -k tg-server.pub

输出这些行:

Telegram-cli version 1.1.1, Copyright (C) 2013-2014 Vitaly Valtman
Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show_license' for details.
I: config dir=[/home/utonto/.telegram-cli]
>

使用“>”提示。 要发送消息,请在此提示符下键入

msg USERNAME This is a test message

我想在我的电脑上运行一个脚本,告诉我工作时的室温。 我怎样才能做到这一点? 我搜索了SO,发现了一个类似的问题。 建议使用“expect”命令,我这样做但是没有用。也许 - 当然 - 我是初学者。 我也试过

echo "msg USERNAME this is a message |
telegram-cli -k ......"

但它不起作用。 据我所知,在我的机器人上我有一个电话号码用于电报,但我使用另一部电话注册到telegram-cli。 有人能帮助我吗?

3 个答案:

答案 0 :(得分:4)

见这里:remote control with Telegram

要拦截新的传入消息,我们会创建一个文件action.lua

  

“Lua是一种功能强大,快速,轻量级,可嵌入的脚本语言。

     

Lua将简单的过程语法与强大的数据描述相结合   基于关联数组和可扩展语义的构造。 LUA   是动态类型的,通过解释a的字节码来运行   基于寄存器的虚拟机,并具有自动内存管理功能   增量垃圾收集,使其成为理想的选择   配置,脚本和快速原型设计。“

来自http://www.lua.org

sudo nano /home/pi/tg/action.lua

有了这个内容

function on_msg_receive (msg)
    if msg.out then
        return
    end
    if (msg.text=='ping') then
        send_msg (msg.from.print_name, 'pong', ok_cb, false)
    end
end

function on_our_id (id)
end

function on_secret_chat_created (peer)
end

function on_user_update (user)
end

function on_chat_update (user)
end

function on_get_difference_end ()
end

function on_binlog_replay_end ()
end

保存并退出,当收到的短信为“ping”时,Telegram会回复一条包含“pong”的短信。

move in tg

cd /home/pi/tg

然后输入

bin/telegram-cli -k tg-server.pub -W -s action.lua

答案 1 :(得分:1)

试试这里的文件:

#!/bin/bash
./bin/telegram-cli -k tg-server.pub <<-EOF
msg USERNAME This is a test message
exit
EOF

我添加了退出 - 不知道是否需要退出。注意:EOF的东西可以是shell无法解释为命令的任何字母。 - 在第一个EOF前面是告诉这里的文档,下一个EOF不在最左边的列中。如果省略它,那么最后一个EOF必须尽可能地离开。第1列。

关于获得温度,我不知道如果没有特殊硬件你会怎么做。

答案 2 :(得分:0)

如果您有某种方法可以将温度传递到您的计算机上,那么将bash发送给您是非常微不足道的。处理重复任务的正确方法是使用cron。您将创建一个crontab条目来启动您的脚本(或直接将温度本身发送到电报)。 cron entry的格式为:

* * * * * command_to_execute
| | | | |
| | | | +- day of week  (0-6) (Sunday = 0)
| | | +--- month        (1-12)
| | +----- day of month (1-31)
| +------- hour         (0-23)
+--------- minute       (0-59)

在您的情况下,您可以使用crontab设置crontab -e(以编辑您的crontab条目)。要每10分钟发送一次温度,它将是:

*/10 * * * * ./script/to/call

或者您可以尝试使用类似于以下内容的crontab直接调用电报:

*/10 * * * * echo "msg $USER The current temp is: $temperature" | ./bin/telegram-cli -k tg-server.pub

最后,在telegram-cli中仔细检查选项,可能会有一个将消息作为参数并转发它完全避免交互模式(我没有检查过)。