目前,我将其放在包装脚本中:
2>&1 ./update.sh | ts | tee -a ./update.log
update.sh 中:
if apt full-upgrade -y | grep linux-headers
then
echo
echo Need to Fix the Capture Driver!
fi
(有一些额外的逻辑可以自动修复驱动程序,但我想你明白了)
它有效,只是我没有apt full-upgrade
在终端或日志文件中获得完整的输出。我只得到grep
匹配的内容。
我可能可以在、 然后和临时文件之前将tee
其完整输出apt full-upgrade
到临时文件,但是有没有比这更好的方法来获取完整的终端和日志并保留逻辑?if
grep
rm
答案1
您不能/dev/stdout
在此处使用,因为它将指向管道。一种方法可能是获取脚本原始标准输出的副本,并打印tee
到其中(我没有测试这一点):
exec 9>&1 # make fd 9 a copy of the current stdout
apt full-upgrade -y | tee /dev/fd/9 | grep linux-headers
exec 9>&- # close fd 9
如果您希望完整输出始终发送到终端,您可以使用/dev/tty
:
apt full-upgrade -y | tee /dev/tty | grep linux-headers
但这将使输出转到终端,无论整个脚本应用什么重定向。
在某些情况下,除了 stdout 之外,还可以使用进程替换将输出重定向到命令:
apt full-upgrade -y | tee >(grep linux-headers)
但这在这里并不起作用,因为您需要 的退出状态,grep
并且进程替换并不容易获得它。