Cron作业和shell脚本分割字符串并发送到SparkCore?

时间:2015-03-30 22:50:07

标签: shell sed cron sparkcore

我想使用selfspy跟踪点击次数,击键次数和鼠标移动次数,然后使用cron作业运行shell脚本并使用(我相信)sed拆分字符串并发送通过curl将信息发送到SparkCore。任何人都可以帮我解决这个问题的sed吗?

bash命令selfstats --clicks返回:

$ selfstats --clicks
5006 keystrokes in 407 key sequences, 2791 clicks (2361 excluding scroll), 157648 mouse movements

Mouse clicks:
2298 left
0 middle
26 right
143 up
287 down

我想在SparkCore方面做的是:

clicks = 2791;
keystrokes = 5006;
mouseMovement = 157648;

到目前为止,我认为shell脚本看起来像这样,使用正确的sed命令:

# !/bin/bash

CLICKS="$(selfstats --clicks | sed)"
KEYSTROKES="$(selfstats --clicks | sed)"
MOUSE_MOVEMENT="$(selfstats --clicks | sed)"

curl https://api.spark.io/v1/devices/0123456789abcdef/programname \
    -d access_token=123412341234 -d clicks=$CLICKS

curl https://api.spark.io/v1/devices/0123456789abcdef/programname \
    -d access_token=123412341234 -d keystrokes=$KEYSTROKES

curl https://api.spark.io/v1/devices/0123456789abcdef/programname \
    -d access_token=123412341234 -d mouseMovement=$MOUSE_MOVEMENT

2 个答案:

答案 0 :(得分:0)

反复解析相同的字符串是浪费和令人沮丧的。如果您使用的工具可以产生机器可读输出,但如果其输出格式相当静态,那么最好是

selfstats --clicks |
awk '{print $1,$7, $12 }' |
while read -r keystrokes clicks mousemovement; do
    :
done

在Bash中,你可以做到

read -r keystrokes clicks mousemovement <(selfstats --clicks |
awk '{print $1,$7, $12 }')

你应该更喜欢使用小写变量名来让你的眼睛休息一下,因为大写是为shell内部使用而保留的。

答案 1 :(得分:0)

好的,所以我无法得到你发布的作品,但awk的添加非常有用。 shell脚本如下所示:

# !/bin/bash

activity="$(selfstats --clicks | sed '2,9d' | awk '{print $1,$7, $12 }')"

curl --silent https://api.spark.io/v1/devices/0123456789abcdef/echo \
  -d access_token=123412341234 -d "args=$activity"

因此,当我直接从终端运行它并检查串行监视器时,这非常有效,给出了三个变量:5006 2791 157648,我可以在Spark Core端拆分。但是,当我将作业作为cron作业运行时,串行监视器只显示换行符。有什么想法吗?