【问题标题】:How to kill watch command after certain time or set timeout for a watch command in bash如何在特定时间后终止 watch 命令或在 bash 中为 watch 命令设置超时
【发布时间】:2019-12-06 23:02:39
【问题描述】:

我正在尝试(每秒)查看 github 中文件的提交历史记录,并查看提交历史记录中的日期对象是否更改。如果提交日期在观看后 30 秒内发生变化,我想停止观看并回显“遇到变化”,否则我想停止观看并回显“我已经观看了 30 秒,但没有遇到任何变化。我看腻了!” .

使用的变量

  • $myPGREADMECommitHist 包含我尝试访问的 URL
  • $mytoken 包含授予对 URL 访问权限的令牌。

以下 watch 命令有效,但必须手动终止 (ctrl + c)

watch -n 1 "curl -H \"Authorization: token $mytoken\" \"$myPGREADMECommitHist\" > challenge1CommitObj.json && jq '.[0].commit.author.date' challenge1CommitObj.json > challenge1Output。 txt && cat challenge1Output.txt"

我尝试在我的 watch 命令之后使用 sudo kill 命令,但它不起作用 sudo kill -9 -INT $(pidof watch)

我也尝试了 timeout 命令和 watch 命令,但不起作用 超时 10 秒观看...

我已经尝试过使用 sleep 命令执行操作,但我仍然想看看 watch 命令是否可以在特定时间后被终止,或者一旦在特定时间内遇到更改就被终止。

【问题讨论】:

  • 听起来你最好使用for i in {1..30}; do ... sleep 1; done 而不是watch

标签: bash watch


【解决方案1】:

您可以将timeout(来自coreutils 包)添加到您的oneliner:
timeout 30 watch -n 1 -g -x date "+%F %R" && echo "Time changed" || echo "Timeout"

这将在 30 秒后杀死 watch 并退出非零值,使第二个 echo 运行。
如果watch 首先退出(使用-g),退出状态为0 并且第一个echo 运行。
只需用你的 git 命令替换 date

一个更详细的脚本或类似@Socowi 提出的解决方案可能更合适。

【讨论】:

    猜你喜欢
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    相关资源
    最近更新 更多