0

我想使用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
4

2 回答 2

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 作业运行时,串行监视器只显示一个换行符。有任何想法吗?

于 2015-04-02T02:36:30.713 回答
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 内部使用而保留的。

于 2015-03-31T18:36:36.687 回答