我正在尝试创建一个bash脚本,该脚本可以将结果可选地打印到控制台(STDOUT和STDERR),日志文件或两者。
我已经让getops设置了选项,但是我似乎无法弄清楚命令。到目前为止,我有这样的事情:
# default logs to both
export LOG_COMMAND=" 2>&1 | tee ${INSTALL_LOG}"
if [ "$ONLY_CONSOLE" == "true" ] ; then
export LOG_COMMAND=""
elif [ "$ONLY_LOG" == "true" ] ; then
export LOG_COMMAND=" | tee ${INSTALL_LOG}"
fi
echo "Starting script" ${LOG_COMMAND}
# ... then do more stuff ...
此脚本仅将其打印到控制台,而不打印到日志文件:
Starting script 2>&1 | tee scriptfile.log
但是我希望脚本可以打印到控制台以及文件scriptfile.log。
有人做过吗?看来echo命令正在将$ {LOG_COMMAND}作为变量处理。
用此作品代替echo命令将同时打印两个:
echo "Starting script" 2>&1 | tee -a ${INSTALL_LOG}
但是,这意味着没有选项可以打印到控制台,日志文件或同时打印到两者。很难同时打印到两者。
答案 0 :(得分:1)
绝对有多种方法可以做到这一点,但最简单的方法可能是使事情保持简单。
在完成getopts之后,您已经弄清楚了去向,然后用它以正确的方式调用main
,并将其余所有逻辑放入main(或从main调用)。例如:
main() {
# do stuff
# call other functions
# do more stuff
}
if [ $ONLY_CONSOLE -eq 0 ]
then
main
elif [ $ONLY_LOG -eq 0 ]
then
main > $INSTALL_LOG 2>&1
else # both
main 2>&1 | tee $INSTALL_LOG
fi
另一种选择是执行人员和其他流程的神秘组合,但是对于少数选项而言,这对我来说才最有意义。