当前位置: 首页>>技术教程>>正文


在终端中每隔x个时间间隔重复一次命令?

, , , ,

问题描述

我怎样才能每隔一段时间重复一次命令,以便它能够运行命令来检查或监视目录?

不需要脚本,我只需要一个简单的命令就可以在终端中执行。

最佳解决办法

您可以使用watch命令,watch用于定期运行任何指定的命令。

打开终端并键入:

watch -n x <your command>

将x更改为您想要的秒数。

有关使用watch命令及其选项的更多帮助,请运行man watch或访问此Link

例如:以下内容将在每个60秒的相同终端上列出桌面目录的内容,以便您知道是否发生了任何更改:

watch -n 60 ls -l ~/Desktop

次佳解决办法

除nux的回答外,您还可以在终端中使用此命令:

while true; do <your_command>; sleep <interval_in_seconds>; done

while true; do ls; sleep 2; done

该命令将以2秒的间隔打印ls的输出。

使用Ctrl + C停止该过程。

watch几乎没有什么缺点

  • 它不能使用任何别名命令。

  • 如果任何命令的输出很长,滚动无法正常工作。

  • maximum time interval设置为超出特定值时会遇到一些麻烦。

  • watch将使用-c--color选项解释传递转义字符的ANSI颜色序列。例如,pygmentize的输出可以工作,但ls --color=auto会失败。

在上述情况下,这可能是一个更好的选择。

第三种解决办法

只是想介绍一下souravc和nux的答案:

  1. 尽管watch可以在Ubuntu上正常工作,但如果您希望”Unix-fu”是纯粹的,例如在FreeBSD上,您可能想避免这种情况,watch是一条命令,用于“在另一条tty线上探听”。

  2. while true; do command; sleep SECONDS; done也有一个警告 – 你的命令可能很难用CTR + C来杀死。你可能想要更喜欢while sleep SECONDS; do command; done–它不仅更短,而且更容易中断。需要注意的是,它会首先睡眠,然后运行命令,因此在命令第一次出现之前您需要等待一些SECONDS

第四种办法

听起来像cron守护进程的理想任务,它允许运行周期性命令。运行crontab -e命令开始编辑用户的cron配置。其格式记录在crontab(5)中。基本上你有五个time-related,space-separated字段后跟一个命令:

The time and date fields are:

       field          allowed values
       -----          --------------
       minute         0-59
       hour           0-23
       day of month   1-31
       month          1-12 (or names, see below)
       day of week    0-7 (0 or 7 is Sunday, or use names)

例如,如果您想在每个星期二上午11点运行Python脚本,请执行以下操作:

0 11 * * 1 python ~/yourscript.py

还有一些替代时间的特殊名称,如@reboot。如果您需要创建临时目录,非常有帮助。从我的crontab(与crontab -l一起列出):

# Creates a temporary directory for ~/.distcc at boot
@reboot ln -sfn "$(mktemp -d "/tmp/distcc.XXXXXXXX")" "$HOME/.distcc"

第五种办法

如果您正在监视文件系统,那么inotifywait非常出色,并且可以为您的系统减轻负担。

示例:

在第一个终端中键入以下命令:

$ inotifywait .

然后在第二个终端中,任何影响当前目录的命令,

$ touch newfile

然后在原始终端inotifywait将醒来并报告事件

./ CREATE newfile2

或者在一个循环中

$ while true ; do inotifywait . ; done
Setting up watches.  
Watches established.
./ OPEN newfile2
Setting up watches.  
Watches established.
./ OPEN newfile2
Setting up watches.  
Watches established.
./ DELETE newfile
Setting up watches.  
Watches established.
./ CREATE,ISDIR newdir
Setting up watches.  
Watches established.

第六种办法

您可以按照以下步骤创建您自己的repeat命令; credits here

首先,打开你的.bash_aliases文件:

$ xdg-open ~/.bash-aliases

其次,将这些行粘贴到文件的底部并保存:

repeat() {
n=$1
shift
while [ $(( n -= 1 )) -ge 0 ]
do
    "$@"
done
}

第三,要么关闭并再次打开您的终端,要么键入:

$ source ~/.bash_aliases

Etvoilà!你现在可以像这样使用它:

$ repeat 5 echo Hello World !!!

要么

$ repeat 5 ./myscript.sh

第七种办法

你可以使用crontab。运行命令crontab -e并用你喜欢的文本编辑器打开它,然后添加这一行

*/10 * * * *  /path-to-your-command

这将每10分钟运行一次你的命令

* */4 * * *  /path-to-your-command

这将每4小时运行一次你的命令

另一种可能的解

$ ..some command...; for i in $(seq X); do $cmd; sleep Y; done

X重复次数。

是时候等待重复。

示例:

$ echo; for i in $(seq 5); do $cmd "This is echo number: $i"; sleep 1;done

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/505.html,未经允许,请勿转载。