首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在删除后自动创建bash脚本的日志文件

如何在删除后自动创建bash脚本的日志文件
EN

Stack Overflow用户
提问于 2016-07-30 07:38:22
回答 1查看 181关注 0票数 1

我有一个bash脚本文件date.sh

代码语言:javascript
运行
复制
#!/bin/bash
while true
do
  sleep 1
  echo "date------ "$(date)
done

我运行它

$ ./date.sh >> date.log 2>&1 &

我可以在那里看到一个date.log并进行更新,但是在我删除它之后,它不会被自动创建,即使我手动重新创建它,这个文件也不会更新,我想要自动创建date.log并在它被删除之后更新它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-30 07:49:03

在此代码中,只打开一次date.log:

代码语言:javascript
运行
复制
./date.sh >> date.log 2>&1 &

如果您希望date.log在丢失的情况下重新创建自己,则需要在每次写入它时重新打开它:

代码语言:javascript
运行
复制
#!/bin/sh
while true; do
  sleep 1
  echo "date------ $(date)" >>date.log
done

因为重定向>>date.log在循环中,所以文件将与每个循环一起打开(并关闭)。这就是重新创建文件所需的内容。

然后您可以运行它:

代码语言:javascript
运行
复制
./date.sh &

现在,如果您删除或重命名date.log,将创建一个名为date.log的新文件并将其写入其中。

请注意,使用每个循环重新打开和重新关闭文件的效率较低。除非您想要重新创建自己的功能,否则只打开和关闭一次会更快。

示例

这表明我们可以在脚本在后台运行时删除date.log,并且该文件很快将被重新创建并附加到:

代码语言:javascript
运行
复制
$ ./date.sh &
[1] 15678
$ cat date.log
date------ Sat Jul 30 00:51:28 PDT 2016
date------ Sat Jul 30 00:51:29 PDT 2016
date------ Sat Jul 30 00:51:30 PDT 2016
date------ Sat Jul 30 00:51:31 PDT 2016
$ rm -f date.log
$ cat date.log
date------ Sat Jul 30 00:51:38 PDT 2016
date------ Sat Jul 30 00:51:39 PDT 2016
date------ Sat Jul 30 00:51:40 PDT 2016
date------ Sat Jul 30 00:51:41 PDT 2016

如果不能修改date.sh怎么办?

假设date.sh为其他人所有,而我们不能修改它。在这种情况下:

代码语言:javascript
运行
复制
./date.sh | awk -v f=date.log '{print>>f; close(f)}' &

awk循环遍历每一行输入,对于每一行,它打开date.log,追加并关闭它。

或者,如果出于某种原因,我们想坚持使用纯shell:

代码语言:javascript
运行
复制
./date.sh | while IFS= read -r line; do printf "%s\n" "$line" >>date.log; done &
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38671556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档