第一步,将该脚本封装在一个文件中,而不是直接在终端上运行它(在我们使用它时会失去 UUOC 奖)。
#!/bin/bash
{
awk 'NR%4 == 2 { print $1 }' file.txt | sort | uniq -c | sort -gr >>output.txt
} 2>error.log
这将捕获文件中的所有错误消息error.log
。然后您可以添加诊断信息。
#!/bin/bash
{
date >&2
set -x
awk 'NR%4 == 2 { print $1 }' file.txt | sort | uniq -c | sort -gr >>output.txt
date >&2
} 2>error.log
现在您已经获得了时间信息——何时开始以及何时结束。由于您在 中,如果您愿意bash
,您可以安排捕获管道中每个进程的退出状态,这样您就可以确切地知道哪些命令以哪种状态退出。您可能会或可能不会收到有关哪个进程被杀死的消息(如果一个进程被外部信号杀死),但如果该进程自行终止,它应该在标准错误上打印一条消息(这就是它的用途,以及为什么将错误打印到标准错误而不是标准输出至关重要)。
使用此脚本,您可以将标准输出转到;output.txt
将标准错误转到error.log
; 该脚本不使用标准输入(数据来自file.txt
)。因此,您可以在没有任何疑虑的情况下运行它,也可以nohup
简单地在后台运行它。&
您可能更愿意将名称file.txt
作为命令行参数;您可能希望使输出和日志文件可配置。您可能更喜欢日期输出的不同格式。所有这些都是可以调整的。但关键是把它放到一个shell脚本中,这样你就可以直接系统地处理这些事情了。