我需要在屏幕上看到输出,同时 grep 输出并将 grep 结果发送到变量。我认为它可以用 tee 来完成,但我不知道具体如何。我试过了
mycommand | tee myvar=$(grep -c keyword)
mycommand | tee >(myvar=$(grep -c keyword))
但这不起作用。应该如何,最好不要写入文件?
我需要在屏幕上看到输出,同时 grep 输出并将 grep 结果发送到变量。我认为它可以用 tee 来完成,但我不知道具体如何。我试过了
mycommand | tee myvar=$(grep -c keyword)
mycommand | tee >(myvar=$(grep -c keyword))
但这不起作用。应该如何,最好不要写入文件?
你会这样做:
使用 tee 将输出直接传送到终端,同时使用 stdout 解析输出并将其保存在变量中。
您可以通过一些文件描述符杂耍来做到这一点:
说明:文件描述符#0用于标准输入,#1用于标准输出,#2用于标准错误;#3 通常不用。在此命令中,将
3>&1
FD #1(标准输出)复制到 #3,这意味着在 FD 中{ }
,有两种方法可以将输出发送到终端(或标准输出的任何地方)。仅捕获 FD #1,因此从其内部发送到 #3的
$( )
任何内容都会绕过它。这正是tee /dev/fd/3
其输入的作用(以及将其复制到其标准输出,即grep
命令的标准输入)。从本质上讲,FD #3 被用来走私输出通过
$( )
捕获。你可以像下面这样使用。如果您想在
-a
tee 中附加使用选项,请记住它会使用您的变量名创建一个文件。