我的环境:zsh,macOS
关注的命令:
echo 'hi' | tee > a b c
echo 'hi' > a b c
- 命令 1 创建名为
a
和内容的b
文件。c
hi
- 命令 2 创建一个名为
a
content的文件hi b c
。
AFAIK,只有命令 1 的用法没有 >
记录在手册页中tee
:
echo 'hi' | tee a b c
我需要一些帮助来理解为什么添加>
上述代码(即命令 1)仍然会创建多个文件,而命令 2 只创建一个文件。
我的环境:zsh,macOS
echo 'hi' | tee > a b c
echo 'hi' > a b c
a
和内容的b
文件。c
hi
a
content的文件hi b c
。AFAIK,只有命令 1 的用法没有 >
记录在手册页中tee
:
echo 'hi' | tee a b c
我需要一些帮助来理解为什么添加>
上述代码(即命令 1)仍然会创建多个文件,而命令 2 只创建一个文件。
重定向(
>
在这种情况下)“使用”以下参数作为重定向的目标;其他一切都不管了。所以相当于
tee
将其输入复制到b
,c
和标准输出到a
.相当于
并输出
hi b c
到标准输出,该输出到a
.这是基本的 shell 语法。重定向运算符
>
只接受一个参数,它用作将标准输出重定向到的文件名。其余参数传递给命令。所以你的第一个命令:
运行命令
echo 'hi' | tee b c
,将其标准输出重定向到 filea
。碰巧,tee
将其标准输入复制到作为参数给出的所有文件以及其标准输出。因此,由 发出的数据echo 'hi'
被复制tee
到 filesb
和c
,并复制到其标准输出,通过重定向是 filea
。你的第二个命令:
运行命令
echo 'hi' b c
,再次将其标准输出重定向到 filea
。如果您想查看生成的文件a
,您会发现它包含文本hi b c
,而在第一种情况下,三个创建的文件都只包含文本hi
。tee
获取标准输入流并将副本发送到指定文件以及标准输出。随着> a
您将标准输出流捕获到文件a
,同时tee
正常写入文件b
和c
.> filename
可以出现在其一侧的任何点|
(只要它的间距适当且没有转义)。为了说明,这些都是同义词: