2017-09-11 7 views
0

私は自分のUbuntuディストリビューションでオートクリッカーとして動作するスクリプトを書いています。クリックは機能しますが、「スリープ」コマンドは正しく機能していないようです。私がクリックを取り出して端末から実行すると、スリープは意図どおりに機能します。しかし、私はそれをショートカットにバインドし、ゲームをプレイしている間にそれを実行すると、スリープ状態にならず、単にクリックし続けるように見えます。BASHスクリプトの 'sleep'コマンドが機能しない

#!/bin/bash 
counter=0  #number of iterations executed 
loop_to=1800 #number of iterations to do 
break_interval=10 #time to break, in seconds 
click_interval=.5 #time between iterations, in seconds 
break_at=15 #how many iterations before taking a break 


while [ $counter -lt $loop_to ]; do 
    xdotool click 1 
    sleep $click_interval 
    echo $counter 
    let counter=counter+1 
    if [[ $(($counter % $break_at)) == 0 ]]; then 
     sleep $break_interval 
     echo I slept 
    fi 
done 

最も重要な睡眠はbreak_intervalです。これは、x時間の間、オートクリッカーを一時停止することです。

+0

ショートカットを使ってスクリプトを実行すると、スクリプトは 'bash'によって実行されますか? '[['は 'bash'に依存する唯一のものです。 – chepner

+0

最初の行に '#!'の前に空白があるようです。つまり、スクリプトが必ずしも 'bash'の下で実行されるわけではありません(どのプログラムがそれを起動するかによって異なります)。 – cdarke

+0

bashを使用して実行されていませんでした。複数の理由から私は拘束力にアクセスできないと思っていましたが、私は友達のために書いたスクリプトだけでした。彼は "sh"を使ってそれを実行していたので、BASH固有のものは動作しなかった。助けてくれてありがとう! – Nathan

答えて

0

テスト:

[[ $(($counter % $break_at)) == 0 ]]

を書き込むことができます。

[ $(($counter % $break_at)) -eq 0 ]

[[ x == y ]]はbashの固有の文字列の平等のためのテストです。

[ x -eq y ]は、任意のPOSIXシェルで動作し、整数の等価性をテストします。

@cdarkeノートでは、あなたのシバン行は間違っています。最初の2文字は#!である必要があります。したがって、これを実行するにはおそらく/bin/shが必要です。

+1

私はこれを友人に代わって投稿しました。私が彼をそこに連れて来たコメントの助けと提案の後に、彼が "sh"でそれを動かしていたことが分かる。みんなありがとう! – Nathan

関連する問題