【问题标题】:bash create file every 10 minutesbash 每 10 分钟创建一次文件
【发布时间】:2018-01-12 16:04:10
【问题描述】:

我想每 10 分钟创建一个文件,创建该文件后,它将被另一个程序用新名称覆盖,因此应通过以下脚本创建一个新名称:

#!/bin/bash
echo 
while true
do
    cat >> trn 
    echo creating trn
    sleep 600   
done

当我运行它时,它会创建第一个文件,不回显语句然后停留在循环中而不创建任何更多文件。

【问题讨论】:

  • 这个脚本不用写了。尝试输入你的 bash watch -n 600 touch trn
  • cat 无限期等待标准输入。
  • @Qback,watch 命令在 macOS 或 bsd 中不这样做。
  • cronjob 怎么样?如果任务应该持续很长时间(例如多天)和/或在重新启动后仍然存在,我会推荐 crontab 而不是 watch。

标签: bash cat


【解决方案1】:

不要为此使用cat >> trn。它实际上正在阻止执行您的脚本(等待用户输入)!

你可以改用(例如)

  • touch trn 或 >> trn(将创建内容为空的 'trn' 文件,前提是不存在)
  • echo > trn(将使用一个换行符内容创建/覆盖“trn”文件)
  • echo -n > trn 或 printf ''(更便携)或简单的 > trn(将使用空内容创建/覆盖“trn”文件)

感谢@CharlesDuffy 的启发性 cmets。 Info here printf '' 比 echo -n 具有更好的可移植性。


如果您的系统支持watch 命令,那么有一个更简单的选项可以替换您的整个脚本(归功于 cmets 中的@Qback):

watch -n 600 touch trn

【讨论】:

  • 这是评论,不是答案。
  • 不,这是一个答案。 cat >> trn 是阻止脚本的原因。
  • 该评论是一个更好的答案。有道理。赞成。
  • (顺便说一句,echo -n 最好用printf '' 代替;参见POSIX standard for echo——通过-n 时行为完全未定义;并且,根据该标准的应用程序使用部分, printf 建议用于新开发)。
  • 我认为> trn 是相当的,不是吗?
猜你喜欢
  • 2020-02-10
  • 2012-02-08
  • 1970-01-01
  • 2023-03-16
  • 2015-08-31
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多