【问题标题】:Repeat command automatically in Linux在 Linux 中自动重复命令
【发布时间】:2012-11-15 15:17:20
【问题描述】:

是否可以在 Linux 命令行中每 n 秒重复一次命令?

说,我有一个导入正在运行,我正在做

ls -l

检查文件大小是否在增加。我想要一个命令让这个自动重复。

【问题讨论】:

    标签: linux bash ubuntu


    【解决方案1】:

    每 5 秒观看一次 ...

    watch -n 5 ls -l

    如果您希望直观地确认更改,请在 ls 命令之前附加 --differences

    根据 OSX 手册页,还有

    --cumulative 选项使突出显示“粘性”,呈现一个 运行显示所有已更改的位置。 -t 或 --no-title 选项关闭显示间隔的标题, 命令,显示屏顶部的当前时间,以及 下面的空行。

    Linux/Unix 手册页可以找到here

    【讨论】:

    • 很好 - 可惜没有将结果附加到命令行
    • 添加了回答选项,允许突出显示更改
    • 请注意,您需要对您正在查看的命令中的特殊字符进行转义,例如:watch mysql dbname -e \"show processlist\;\"
    • 手表未安装在 mac os X 10.10
    • watch 也可以与多个命令一起使用,用引号和分号分隔,例如:watch -n 5 "ls -l; echo; ps -aux"。讨论见askubuntu.com/q/595927/846840
    【解决方案2】:
    while true; do
        sleep 5
        ls -l
    done
    

    【讨论】:

    • watch 也有清除屏幕的不幸副作用,所以有时循环很有用。使用哪种取决于所需的输出格式。
    • 我通常会做循环,但要在一行上做。手表看起来好多了,不过,我必须切换到那个。
    • @MartyWallace 这可以通过命令行(while 循环)来完成。
    • 值得注意的是,您可以使用--differences 将它们突出显示(如果您担心终端的重绘)
    • 这比watch 好。例如,当您想在每次调用中生成随机数时,Watch 不起作用,例如watch -n 1 echo ${RANDOM}。 random 只会被调用一次。
    【解决方案3】:

    "watch" 不允许在 Busybox 中使用几分之一秒,而"sleep" 可以。如果这对你很重要,试试这个:

    while true; do ls -l; sleep .5; done
    

    【讨论】:

    • 如果您需要在某处管道输出(如 bar aint recursive),这很有用
    • 谢谢。这适用于没有 watch 命令的 busybox 控制台。我用它来衡量我的系统的正常运行时间:虽然是这样;正常运行时间;睡觉1;完成
    • 旧版busybox (v1.11.2) 上的FWIW 我坚持使用,没有手表,睡眠不支持分数。但是你可以成功使用 sleep 1。
    • 这也是在 cygwin 中运行它的好方法
    【解决方案4】:

    sleep 已经返回 0。因此,我正在使用:

    while sleep 3 ; do ls -l ; done
    

    这比 mikhail 的解决方案短一点。一个小缺点是它在第一次运行目标命令之前休眠。

    【讨论】:

      【解决方案5】:

      如果命令中包含一些特殊字符,例如管道和引号,则命令需要用引号填充。例如,要重复ls -l | grep "txt",watch 命令应该是:

      watch -n 5 'ls -l | grep "txt"'

      【讨论】:

      • 我无法让手表在管道表达式上正常工作,但在阅读完这篇文章后我可以修复它:)
      【解决方案6】:

      当我们使用 while 时,可以在没有 cron 的情况下定期运行命令。

      作为命令:

      while true ; do command ; sleep 100 ; done &
      [ ex: # while true;  do echo `date` ; sleep 2 ; done & ]
      

      例子:

      while true
      do echo "Hello World"
      sleep 100
      done &
      

      不要忘记最后一个&,因为它会将您的循环置于后台。但是您需要使用命令“ps -ef | grep your_script”找到进程ID,然后您需要将其杀死。因此,请在运行脚本时添加“&”。

      # ./while_check.sh &
      

      这是与脚本相同的循环。创建文件“while_check.sh”并将其放入:

      #!/bin/bash
      while true; do 
          echo "Hello World" # Substitute this line for whatever command you want.
          sleep 100
      done
      

      然后输入bash ./while_check.sh &运行它

      【讨论】:

      • 不是最后一个 & ,和写命令最后不带 & 一样,而是用 & 调用脚本:bash ./while_check.sh & ?
      • @ransh :我们可以运行脚本 ./while_check.sh & 所以我们可以立即获取进程 ID,当我们在脚本中添加 & 并且只运行不带 & 的脚本时,我们没有获取任何进程 ID,但它将在后台运行,因为我编辑了如果我们需要停止脚本,我们需要 ps 命令来获取进程 ID。
      • 如果您愿意,可以在每个后台进程启动后将脚本修改为echo $!——这是在后台启动的最后一个子进程的PID。
      • echo `date` 只是写date 的一种糟糕且有点错误的方式。 (该错误与缺少对 echo 的参数引用有关。)另见 useless use of echo.
      【解决方案7】:

      手表很好,但会清洁屏幕。

      watch -n 1 'ps aux | grep php'
      

      【讨论】:

        【解决方案8】:

        如果你想避免“漂移”,这意味着你希望命令每 N 秒执行一次,而不管命令需要多长时间(假设它需要少于 N 秒),这里有一些 bash 会每 5 秒重复一次命令精确到一秒(如果跟不上会打印出警告):

        PERIOD=5
        
        while [ 1 ]
        do
            let lastup=`date +%s`
            # do command
            let diff=`date +%s`-$lastup
            if [ "$diff" -lt "$PERIOD" ]
            then
                sleep $(($PERIOD-$diff))
            elif [ "$diff" -gt "$PERIOD" ]
            then
                echo "Command took longer than iteration period of $PERIOD seconds!"
            fi
        done
        

        由于睡眠仅精确到一秒,它可能仍会稍微漂移。您可以通过创造性地使用 date 命令来提高这种准确性。

        【讨论】:

        • 谢谢.. 但我有 2 个问题,1- 在哪里保存该代码?换句话说,我应该将包含该脚本的文件放在哪个路径中?让它自动运行?! 2- 如何在(#do 命令)中包含 php 文件,而不是在那里输入我的所有代码?
        • 我建议你研究一下 bash 脚本,这样你就可以了解如何运行它们的基础知识等等。
        【解决方案9】:

        如果你想做某事特定的次数,你总是可以这样做:

        repeat 300 do my first command here && sleep 1.5
        

        【讨论】:

        • for bash 做for x in {1..300} ; do 命令||break;sleep 1.5; done
        【解决方案10】:

        您可以运行以下命令并仅过滤大小。如果您的文件名为somefilename,您可以执行以下操作

        while :; do ls -lh | awk '/some*/{print $5}'; sleep 5; done

        众多想法之一。

        【讨论】:

          【解决方案11】:

          要更轻松地减少漂移,请使用:

          while :; do sleep 1m & some-command; wait; done
          

          由于 bash 运行循环结构和实际执行 sleep 命令的时间,仍然会有少量的漂移。

          提示:':' eval 为 0,即 true。

          【讨论】:

            【解决方案12】:

            一个简洁的解决方案,如果你想重复运行命令直到它失败,它特别有用,并且可以让你看到所有的输出。

            while ls -l; do
                sleep 5
            done
            

            【讨论】:

              【解决方案13】:
              watch -n 5 'ls -l 
              

              将在每 5 秒后运行ls -l 命令

              输出:-

              Every 5.0s: ls -l                                                                                                      Fri Nov 17 16:28:25 2017
              
              total 169548
              -rw-rw-r--  1 sachin sachin     4292 Oct 18 12:16 About_us_Admission.doc
              -rw-rw-r--  1 sachin sachin      865 Oct 13 15:26 About_us_At_glance.doc
              -rw-rw-r--  1 sachin sachin     1816 Oct 13 16:11 About_us_Principle.doc
              -rw-rw-r--  1 sachin sachin     1775 Oct 13 15:59 About_us_Vission_mission.doc
              -rw-rw-r--  1 sachin sachin     1970 Oct 13 16:41 Academic_Middle_school.doc
              -rw-rw-r--  1 sachin sachin      772 Oct 16 16:07 academics_High_School.doc
              -rw-rw-r--  1 sachin sachin      648 Oct 16 13:34 academics_pre_primary.doc
              -rw-rw-r--  1 sachin sachin      708 Oct 16 13:39 academics_primary.doc
              -rwxrwxr-x  1 sachin sachin     8816 Nov  1 12:10 a.out
              -rw-rw-r--  1 sachin sachin    23956 Oct 23 18:14 Ass1.c++
              -rw-rw-r--  1 sachin sachin      342 Oct 23 22:13 Ass2.doc
              drwxrwxr-x  2 sachin sachin     4096 Oct 19 10:45 Backtracking
              drwxrwxr-x  3 sachin sachin     4096 Sep 23 20:09 BeautifulSoup
              drwxrwxr-x  2 sachin sachin     4096 Nov  2 00:18 CL_1
              drwxrwxr-x  2 sachin sachin     4096 Oct 23 20:16 Code
              drwxr-xr-x  2 sachin sachin     4096 Nov 15 12:05 Desktop
              -rw-rw-r--  1 sachin sachin        0 Oct 13 23:12 doc
              drwxr-xr-x  4 sachin sachin     4096 Nov  6 21:18 Documents
              drwxr-xr-x 27 sachin sachin    12288 Nov 17 13:23 Downloads
              -rw-r--r--  1 sachin sachin     8980 Sep 19 23:58 examples.desktop
              

              【讨论】:

                猜你喜欢
                • 2017-02-17
                • 2018-01-10
                • 1970-01-01
                • 1970-01-01
                • 2015-09-05
                • 2013-04-08
                • 2016-12-03
                • 2012-12-02
                • 1970-01-01
                相关资源
                最近更新 更多