2012-07-15 37 views
1

我試圖跟蹤android中通知的停用。 這是我計劃通過每隔x秒輪詢通知dumpsys來完成的。 那裏我已經把通知放入一個變量,所以我可以搜索$ tmp變量的文本(在本例中爲google.gm),並基於此將$ Gmail設置爲true或false。Android中的BASH>使用通配符不起作用

當我測試通過PC上的Cygwin終端我的腳本,設置它在Android

偉大的工作,但沒有得到dumpsys通知到$ TMP工作正常,但是當我測試它(中殼)上它似乎不想接受我的*通配符。

tmp=$(dumpsys notification) 
[[ "$tmp" == *"google.gm"* ]] && Gmail=true || Gmail=false 

我一直在網上搜索最近兩個小時,但它會讓我發瘋。 我已經完成了簡化測試來調試它,它看起來好像是通配符

有沒有人看到我做錯了什麼?

新的建議後,我設法使這一點吧:

tmp=$(dumpsys notification) 
case $tmp in *notify_missed_call*) PRF1="1" ;; *) PRF1="0" ;; esac 
case $tmp in *conv_notify*) PRF2="1" ;; *) PRF2="0" ;; esac 
case $tmp in *NotYetThere*) PRF3="1" ;; *) PRF3="0" ;; esac 
case $tmp in *stat_notify_calendar*) PRF4="1" ;; *) PRF4="0" ;; esac 
echo $PRF1,$PRF2,$PRF3,$PRF4, > /sdcard/tmp.txt 

但不知何故,只把與1號線工程時;它們之間。 任何方式使這項工作多行(更容易維護)並優化它?

謝謝

+0

請顯示驗證碼。 – DrinkJavaCodeJava 2012-07-15 21:23:58

+0

你的例子中沒有通配符? – npostavs 2012-07-15 21:25:43

+1

除非您使用經過修改的Android圖像,否則Android的默認安裝不會使用bash。有很多東西,除了通配符(主要實際上是這樣),它們不起作用(比如'[['')。你最好在它上面找一個Busybox或真正的Bash。 – fork0 2012-07-15 21:27:04

回答

0

聽起來像你沒有bash在Android上,所以嘗試使用POSIX來代替。

case $(dumpsys notification) in 
    *google.gm*) Gmail=true ;; 
    *) Gmail=false ;; 
esac 

更新 鑑於你的更新的答案,我看到你檢查在dumpsys notification輸出多個值。假定只有那些串時,會發生在一條線上,這樣做的更好的辦法是通過線與殼線閱讀或在awk

dumpsys notification | { 
    while read -r line; do 
     case $line in 
      *notify_missed_call*) prf1=1;; 
      *conv_notify*) prf2=1;; 
      *NotYetThere*) prf3=1;; 
      *stat_notify_calendar*) prf4=1;; 
     esac 
    done 
    echo "${prf1:-0},${prf2:-0},${prf3:-0},${prf4:-0}" 
} > /sdcard/tmp.txt 

使用awk,你可以在同一行檢測多個值。

dumpsys notification | awk ' 
    /notify_missed_call/{missed=1} 
    /conv_notify/{conv=1} 
    /NotYetThere/{notyet=1} 
    /stat_notify_calendar/{cal=1} 
    END { print missed+0,conv+0,notyet+0,cal+0 }' > /sdcard/tmp.txt 
+0

這不會在shell中執行任何操作。 我已經安裝了BusyBox v1.18.4,並有其他腳本工作,只是不是這個:) – Nixx 2012-07-16 12:50:15

+0

@Nixx,什麼都不做?它不會根據'dumpsys'的輸出將Gmail變量設置爲true或false?變量保持空白?它會產生錯誤信息嗎?順便說一句,另一種測試輸出的方法是'如果dumpsys通知| grep -Fq'google。通用汽車公司;那麼Gmail = true;否則Gmail = false; fi' – geirha 2012-07-16 13:29:59

+0

對不起,關於「無所事事」我在寫作的那一刻仍然睡着,沒有迴應$ Gmail檢查... ,但在兩個sitution中,我得到一個虛假的事件,儘管他們是一個android.google。 gm目前在dumpsys通知 – Nixx 2012-07-16 14:16:15

相關問題