我被一段应该既输出到标准输出又写入文件的bash脚本难住了。我在函数中使用了一些变量。每当我尝试使用tee将函数重定向到一个文件并打印到屏幕上时,我无法使用在函数中使用的变量,它们似乎变成了局部变量。
这里是一个简单的示例:
#!/bin/bash
LOGV=/root/log
function var()
{
echo -e "Please, insert VAR value:\n"
read -re VAR
}
var 2>&1 | tee $LOGV
echo "This is VAR:$VAR"
输出:
[root@testbox ~]# ./var.sh
Please, insert VAR value:
foo
This is VAR:
[root@testbox ~]#
提前致谢!
编辑:
响应@Etan Reisner的建议,使用
var 2>&1 > >(tee $LOGV)
这种构造的唯一问题是日志文件没有接收到全部内容...
[root@testbox~]# ./var.sh
Please, insert VAR value:
foo
This is VAR:foo
[root@testbox ~]# cat log
Please, insert VAR value:
tee
),因此对var
的初始调用发生在子shell中。因此,你在该子进程中设置了一个环境变量,但并不会影响主(父)进程的环境。 - Steve Summit> >(tee $LOGV)
这样的进程替换和输出重定向来替换管道。 - Etan Reisner