我正在执行命令
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