echo start commanda
output=$(commanda soemthing)
echo $output
echo start commandb
output=$(commandb something)
echo $output`
我如何在shell中这样做,以便我保持:
echo start commanda
echo start commandb
在stdout中,同时保持:
echo start commanda
echo $output
echo start commandb
echo $output
在日志文件中?
答案 0 :(得分:1)
如果希望stdout转到文件,请使用重定向。如果您希望它去两个地方,请使用tee
:
echo start commanda | tee -a logfile
output=$(commanda soemthing)
echo $output >>logfile
echo start commandb | tee -a logfile
output=$(commandb something)
echo $output >>logfile
工作原理:
>>logfile
称为重定向。它捕获stdout并将其附加到文件logfile
。
| tee -a logfile
捕获上一个命令的标准输出,将副本附加到logfile
并再次将其复制到标准输出。如果您希望覆盖该文件而不是附加到该文件,则省略-a
。
以下内容将所有输出发送到logfile
。以start
开头的任何输出行也会发送到stdout:
{
echo start commanda
output=$(commanda soemthing)
echo $output
echo start commandb
output=$(commandb something)
echo $output
} | tee -a logfile | grep '^start'
大括号{...}
将语句组合在一起,这样我们只需要重定向整个组。这减少了文件logfile
打开和关闭的次数。这种方法的缺点是,如果output
以start
开头,它也会被发送到stdout。