2015-03-30 23 views
0

我想使用selfspy來跟蹤點擊次數,擊鍵次數和鼠標移動次數,然後使用cron作業來運行shell腳本並使用(我相信)sed分割字符串,並通過curl將信息發送到SparkCore。任何人都可以幫我解決這個問題的sed部分嗎?Cron作業和shell腳本將字符串拆分併發送到SparkCore?

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/abcdef/programname \ 
    -d access_token=123412341234 -d clicks=$CLICKS 

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

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

好吧,我用'selfstats --clicks | sed'2,9d'| sed's/\([0-9] * \)。*/\ 1 /''返回keystokres,'5006',這樣看起來很成功。我會想象有一個更簡潔的方式來做到這一點,但我無法到達那裏。而且,我認爲RE可以存儲多達9種模式,並且我可以將命令命令爲'selfstats --clicks | sed'2,9d'| sed's/\([0-9] * \)。*/\ 3 /'',但是這不起作用:'sed:1:'s/\([0-9] * \)。*/\ 3 /「:\ 3未在RE中定義。 – 2015-03-31 17:57:53

回答

0

反覆解析t他同樣的字符串是浪費和沮喪。這將是最好的,如果你使用的工具可能產生機器可讀的輸出,但如果它的輸出格式是相當靜態的,你可以做

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的內部使用。

0

好吧,所以我不能完全得到你發佈的工作,但awk的添加是非常有幫助的。 shell腳本是這樣的:

# !/bin/bash 

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

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

所以,這個完美的作品時,我直接從終端運行它,並檢查串口監聽,給三個變量:5006 2791 157648,我可以在Spark芯部側分開。但是,當我將作業作爲cron作業運行時,串行監視器只顯示換行符。有任何想法嗎?

+0

嗯...你可以嘗試從cronjob記錄你的輸出到一個文件,以確保它正確輸出。只需記錄curl命令的結果或附加'echo $ results> output.log',讓您的cronjob運行幾次,然後檢查'output.log'以確保它的行爲與您的希望一致。附:你可能想從這個stackoverflow問題中刪除你的'access_token'。 – Brannon 2015-04-05 18:35:48