将脚本错误消息写在一行中

将脚本错误消息写在一行中

我正在执行命令

mv /prod/new/outputlog/error.log  /prod/hist/new/outputlog/error.log.32423423424

使用 shell 脚本。

由于该error.log文件不可用,该命令会自动将错误消息写入日志文件。错误消息mv: cannot rename /prod/new/outputlog/error.log /prod/hist/new/outputlog/error.log.32423423424未换行为两行。

由于它是系统生成的错误消息,我无法控制每行错误消息的长度。我希望系统在消息长度达到 80 后将其包装。

答案1

您可以mv通过在尝试重命名源文件之前确保源文件存在来保护该尝试:

test -f /prod/new/outputlog/error.log &&
    mv /prod/new/outputlog/error.log /prod/hist/new/outputlog/error.log.32423423424

或者您可以捕获错误消息并尝试将其分成两行:

mv /prod/new/outputlog/error.log /prod/hist/new/outputlog/error.log.32423423424 2>&1 |
    fmt -s -w80 >&2

答案2

不要破坏错误消息,只需在移动文件之前对其进行测试即可:

if [ -f /prod/new/outputlog/error.log ]; then
    mv /prod/new/outputlog/error.log \
       /prod/hist/new/outputlog/error.log.32423423424
fi

或使用快捷逻辑:

[ -f /prod/new/outputlog/error.log ] &&
mv /prod/new/outputlog/error.log \
    /prod/hist/new/outputlog/error.log.32423423424

如果缺少日志文件是需要报告的问题,请单独执行此操作:

if [ -f /prod/new/outputlog/error.log ]; then
    mv /prod/new/outputlog/error.log \
       /prod/hist/new/outputlog/error.log.32423423424
else
    echo 'ERROR: /prod/new/outputlog/error.log is missing' >&2
fi

答案3

当您想查看它时,为什么不将其截断,而不是“损坏”error.log:

cut -c 1-80 error.log | less

相关内容