我用来watch -g
监视命令的输出并在命令发生变化时立即退出。问题是 watch 的所有 UI 元素(包括我正在监视的命令的输出)一旦退出就会消失。我想知道手表退出之前输出发生了什么变化。这可能吗?
答案1
watch -g "ls | tee -a log_file"
您log_file
将得到命令的输出。
ls
只是示例,当然您将使用自己的命令,或者如果有更多命令,您应该将它们放在括号中,如下面的答案所示。归功于这个答案。
为了更容易识别最后一个和倒数第二个输出之间的差异,您可以添加空的新行和一些标记:
watch -g "(echo; echo 'New output below:'; echo '------------------'; ls) | tee -a log_file"
答案2
如果您愿意不使用 watch,请尝试此操作,它将在命令失败时显示最新的输出。替换somecommand
为您的命令。
logFile='/var/log/somecommand.log'
somecommand &> $logFile &
expectedOutput=$(cat $logFile)
while true; do
somecommand &> $logFile &
actualOutput=$(cat $logFile)
if [[ "$actualOutput" != "$expectedOutput" ]]; then
echo "Process failed, here is the most recent output..."
echo "$actualOutput"
exit 1
fi
sleep 2
done