我想要一个日志功能,它将文件名作为参数并将标准输出复制到所有这些文件。这是我到目前为止提出的:
function logger() {
exec > >(tee -ia /var/log/{log1,log2})
}
当我尝试用 替换{log1,log2}
时{$*}
,我得到用空格分隔的参数。所以,我想我会做这样的事情:
function logger() {
exec > >(IFS=,; tee -ia /var/log{"$*"}
}
这无法做我想要的,因为在进行变量替换之前会发生大括号扩展。所以,我想我可以这样做:
function logger() {
exec > >(IFS=,; eval "tee -ia /var/log/\{$*\}")
}
但这行为相同,即logger one two
创建一个名为{one,two}
.
这是为什么?如何让大括号扩展工作以便tee
写入多个文件?
您不能在
bash
. 请参阅例如如何在序列的外壳大括号扩展中使用 $variable?如果您不想将
logger
函数称为函数写为
那么你能做的就是把它称为
或者
并将函数写为
或更短(但或多或少不可读),
或者,如果您愿意,
/var/log/
这通过添加到每个元素的开头来 重写位置参数列表的每个元素。tee
然后使用修改后的参数列表调用。