【问题标题】:BASH script 'sleep' command not workingBASH 脚本“睡眠”命令不起作用
【发布时间】:2018-02-20 00:53:01
【问题描述】:

我已经编写了一个脚本来作为我的 Ubuntu 发行版上的自动点击器。点击有效,但“睡眠”命令似乎无法正常工作。如果我取出点击并从终端运行它,那么睡眠会按预期工作。但是当我将它绑定到快捷方式并在玩游戏时运行它时,它不会休眠,它似乎只是不停地点击。

 #!/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 时间。

【问题讨论】:

  • 当您通过快捷方式运行该脚本时,您确定该脚本是由bash 运行的吗? [[ 是唯一依赖于 bash 的东西。
  • 第一行的#! 之前似乎有空格。这意味着脚本不一定在bash 下运行(这取决于哪个程序启动它)。
  • 它没有使用 bash 运行。我相信出于多种原因,我无法访问绑定,只能访问我为朋友编写的脚本。他使用“sh”运行它,因此特定于 BASH 的东西导致它无法工作。感谢您的帮助!

标签: linux bash scripting automation xdotool


【解决方案1】:

测试:

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

可以写成:

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

[[ x == y ]] 是特定于 bash 的,用于测试字符串是否相等。

[ x -eq y ] 适用于任何 POSIX shell 并测试整数相等性。

正如@cdarke 所说,您的shebang 行不正确,前两个字符必须是#!,因此您可能会得到/bin/sh 来运行它。

【讨论】:

  • 我代表朋友发布了这个。原来他用“sh”运行它,经过一些帮助和 cmets 中的建议后,我把他带到了那里。谢谢大家!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 2014-05-23
  • 2023-02-05
  • 1970-01-01
  • 2021-04-24
  • 1970-01-01
  • 2014-11-19
相关资源
最近更新 更多