如何编写一个同时写入控制台和日志文件的函数?

如何编写一个同时写入控制台和日志文件的函数?

我想编写一个函数,将消息同时写入控制台和日志文件。我最初的尝试是这样的:

function log_write {
    local message=$1
    local log_file=$2
    echo "${message}" | tee -a ${log_file}
}

但那行不通——我猜是因为函数上下文中的 echo 表示“返回一个值”,而不是写入控制台。我错过了什么?我在脚本中像这样调用它:

message='something interesting happened'
log_file='my_script.log'
$(log_write $message $log_file)

另外,我通过 msysgit 端口在 Windows 上运行它,但我发现问题双重存在。

答案1

命令替换语法是这里的问题:

$(log_write $message $log_file)

调用该函数,并且返回输出,准备在变量中捕获。但是,您没有这样做。

相反,你想像调用其他命令一样调用你的函数:

log_write "$message" "$log_file"

注意引号:它们对于将多字消息保留为单个参数至关重要。否则,如果您这样做:

message="hello world"
log_write $message $log_file

然后,你将看到单词“hello”写入文件“world”。这是因为单词拆分在变量扩展之后。经验法则:总是引用你的变量,除非你明确想要单词拆分和文件名扩展省略引号的效果。还有省略引号的安全隐患

相关内容