我正在编写一个我想要的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.log
或script.sh TERMINAL
?
答案 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}
。