根据请求将脚本输出重定向到日志文件OR终端

时间:2010-08-05 20:26:24

标签: linux bash

我正在编写一个我想要的bash脚本,将所有内容输出到日志文件中。但是,我还希望能够通过日志文件的请求(例如参数)INSTEAD将其输出到主叫终端(所以我认为tee已经出来了)。有谁知道一个简单的方法吗?

如果参数可以是自定义日志文件或对主叫终端的引用,那将是很好的。

我正在考虑这个问题:(伪代码)

#!/bin/bash

if [ ! $1 ]; then
    OUT="default.log"
else
    OUT=$1
fi

#then do this to every call in the script
commands [param] [param] >> ${OUT}

我想更多我要问的是,是否有一种简单的方法可以引用当前终端输出?我可以./script.sh./script.sh custom.logscript.sh TERMINAL

2 个答案:

答案 0 :(得分:4)

使用/dev/stdout作为文件名可以达到你想要的效果。

答案 1 :(得分:3)

我可能会这样:

#!/bin/bash

if [[ $1 != --stdout ]]; then
    exec >> "${1:-default.log}"
fi

commands [param] [param]

结果:如果用户通过--stdout,则输出转到stdout,否则转到日志文件。用户可以在命令行上传递日志文件名,如果他们没有指定,则默认为default.log

exec部分很好,因为它会重定向脚本中所有未来的输出。它使您无需为每个命令添加>> ${OUT}