2016-12-08 7 views
1

私はバックグラウンドで常に実行されるBASHスクリプトを作成しようとしています。このbashスクリプトはrpi-cecdコマンドの結果を要求し、45:00が含まれている場合は何かを行い、45:03が含まれている場合は何か他のことをします。しかし、現時点では、私は複数の結果を求めるなら、スクリプトを動作させることはできません。BASH |コマンドが何かの場合は、何かを行う場合は

動作するコードが、唯一私がしようとしたが、全く動作しませんでした45:00

/home/rpi-cecd/rpi-cecd | grep -q "45:00" && ok 


コードを尋ねます。

/home/rpi-cecd/rpi-cecd | grep '45' > /dev/null 
if [[ $? =~ .*45:00.* ]] 
then 
    echo "OK Button Clicked - HMS" 
    ok 
elif [ $? == *"45:03"* ] 
then 
    echo "Left Button Clicked - Canteen" 
    left 
else 
    echo "Nothing Clicked?" 
fi 

EDIT 私はただ運でこれを試してみました。

hhmm=$(/home/rpi-cecd/rpi-cecd) 
case "$hhmm" in 
     45[:]00) 
       ok 
       ;; 
     45[:]03) 
       left 
       ;; 
     *) 
       echo "don't know how to process $hhmm" 
       ;; 
esac 
+0

と、少なくとも(両方で倍増し、角括弧を使用することをお勧めifとelifの中で同じ角括弧戦略を使用)。それは動作しますか? – Dilettant

+0

問題の1つは、 '$?'は最後のコマンドの終了コード*です(通常は成功の場合は0、失敗の場合は負の数)。出力の結果は含まれません。 'grep'コマンドの出力が必要な場合は、それをキャプチャする必要があります。 –

+0

'$?'は直前に実行されたcmdの返品ステータスです。常に整数であり、 '45:00'のようなものは含まれません。他にも多くの問題がありますが、最初のcmdを試して、出力をvar、ileに保存してください。 'hhmm = $(rpi-cecd ...)'。今度はそれを45 [:] 00のcase $ hhmmと比較してください)cmd1 ...; 45 [:] 03)cmd2 ... ;; *)echo "$ hhmmをどのように処理するか分からない" ;;エサック。がんばろう。 – shellter

答えて

2

rpi-cecdが終了せずに連続して実行されている場合、出力を一度キャプチャすることはできません。あなたはそれを絶えず読む必要があります。その出力をwhile readループにパイプすることで、これを行うことができます。

/home/rpi-cecd/rpi-cecd | while IFS= read -r line; do 
    case $line in 
     *45:00*) 
      ok 
      ;; 
     *45:03*) 
      left 
      ;; 
     *) 
      echo "don't know how to process $line" 
      ;; 
    esac 
done 
+0

これはまだ動作しません:/このコマンドはテールのようなものですが、ターミナルに物事があり、TVリモコンの[OK]ボタンをクリックすると、45:00を含むコード行が書き込まれます。 (それが何か変更されている場合) –

0

あなたがそれらを使用する前に、あなたの答えをきれいにする必要がある場合があります@Someprogrammerdudeが示すように

payload= 
while read line;do 
    [ "$line" ] && [ -z "${line//*payload=*}" ] && payload=${line#*payload=[} 
    done < <(/home/rpi-cecd/rpi-cecd) 

case ${payload%%]*} in 
    *45:00) 
     echo payload 45oo 
     ;; 
    *45:03) 
     echo payload 45.3 
     ;; 
    *) 
     echo "other ("${payload%%]*}")..." 
     ;; 
    esac 
+0

このコマンドは 'other ...'を出力して終了し、rpi-cecdはテールになっており、コマンドが実行されているときに45:0 ...テレビのリモコン。 –

+0

[OK]をクリックすると、* payload *行を見つけるために 'rpi-cecd'の全出力を読む必要があります。 –

関連する問題