我想通过日志程序重定向bash脚本的输出。具体来说,Apache的logrotate实用程序。需要在脚本本身内设置重定向。
如果重定向是在命令行上完成的,那么在执行脚本时,它看起来像这样:
myscript | logrotate -l $LOGFILE.%F 86400 2>&1
以下是一些伪代码,它们在脚本内部完成输出重定向,但不起作用:
exec >(logrotate -l $LOGFILE.log.%F 86400) 2>&1
答案 0 :(得分:4)
您可以使用命名管道来完成此操作。
PIPE=/var/run/myscript/pipe
mkfifo "$PIPE"
logrotate -l "$LOGFILE.%F" 86400 < "$PIPE" &
exec > "$PIPE"
此外,关于您的2&gt;&amp; 1重定向 - 请确保您了解其应用的内容。在您的第一个示例中,它适用于logrotate,而在第二个“示例”中,它将应用于您的脚本。
答案 1 :(得分:3)
这就是你想要的:
exec > >(logrotate -l $LOGFILE.log.%F 86400)
请参阅Bash手册中的“流程替换”。
请注意,流程替换不是标准的。后备命名为管道。
答案 2 :(得分:0)
我不认为脚本可以重定向它自己的输出。你可以为它写一个包装脚本吗?
的MyScript:
myscript.real "$@" | logrotate -l $LOGFILE.%F 86400 2>&1
答案 3 :(得分:0)