unix 如何将最新的输出结果附加到文本文件中而不需要反复输出

sr4lhrrt  于 2023-01-30  发布在  Unix
关注(0)|答案(1)|浏览(163)

我想把最近执行时间的作业状态输出到文本文件中,但是每次运行作业时(使用cronjob调度),它也会在文本文件中附加旧的执行结果,但是我只想得到最近执行结果的文本输出。如何克服这个问题。
示例:

#!/bin/bash
ydate="$(date +"%H-%M-%S")"
echo "${ydate} Test1   Done " >>/app/my_status.log 2>>/app/my_status.log.err
echo "${ydate} Test2   Done " >>/app/my_status.log 2>>/app/my_status.log.err
echo "${ydate} Test3   Done " >>/app/my_status.log 2>>/app/my_status.log.err
echo "${ydate} Test4   Error " >>/app/my_status.log 2>>/app/my_status.log.err
echo "${ydate} Test5   Not_Running " >>/app/my_status.log 2>>/app/my_status.log.err

当我每5分钟执行一次脚本时,我得到如下结果

14-41-14 Test1   Done
14-41-14 Test2   Done
14-41-14 Test3   Done
14-41-14 Test4   Error
14-41-14 Test5   Not_Running
14-46-15 Test1   Done
14-46-15 Test2   Done
14-46-15 Test3   Done
14-46-15 Test4   Error
14-46-15 Test5   Not_Running
14-51-15 Test1   Done
14-51-15 Test2   Done
14-51-15 Test3   Done
14-51-15 Test4   Error
14-51-15 Test5   Not_Running`

但我只想在最后一次执行结果后获得5行最新时间,如下所示

14-51-15 Test1   Done
14-51-15 Test2   Done
14-51-15 Test3   Done
14-51-15 Test4   Error
14-51-15 Test5   Not_Running`

不加附加而回送结果

btxsgosb

btxsgosb1#

如果你想截断的话。使用分组。

#!/bin/bash

ydate=$(date +"%H-%M-%S")

{
    echo "${ydate} Test1   Done"
    echo "${ydate} Test2   Done"
    echo "${ydate} Test3   Done"
    echo "${ydate} Test4   Error"
    echo "${ydate} Test5   Not_Running"
} >/app/my_status.log 2>/app/my_status.log.err

你也可以使用exec打开一个文件,并在整个会话中使用一个文件描述符。

相关问题